if (listofelements.Contains(valueFieldValue.ToString()))
{
listofelements[listofelements.IndexOf(valueFieldValue.ToString())] = value.ToString();
}
He reemplazado como arriba. ¿Hay alguna otra mejor manera de comparar el lugar que esta?
Use Lambda para buscar el índice en la Lista y use este índice para reemplazar el elemento de la lista.
List<string> listOfStrings = new List<string> {"abc", "123", "ghi"};
listOfStrings[listOfStrings.FindIndex(ind=>ind.Equals("123"))] = "def";
Equalsprueba simple , el buen viejoIndexOffunciona igual de bien y es más conciso, como en la respuesta de Tim .Podría hacerlo más legible y más eficiente:
Esto solicita solo una vez el índice. Su enfoque usa
Containsprimero el que necesita repetir todos los elementos (en el peor de los casos), luego está usando elIndexOfque necesita enumerar los elementos nuevamente.fuente
Equalso solo encontrará el objeto si es la misma referencia. Tenga en cuenta questringtambién es un objeto (tipo de referencia).Equalsy también debe recordar que a veces al mismo tiempo tiene que implementarGetHashCodeGetHashCodesi anula,EqualsperoGetHashCodesolo se usa si el objeto está almacenado en un conjunto (feDictionaryoHashSet), por lo que no se usa conIndexOfoContains, soloEquals.IndexOfusaEqualityComparer<T>.Default. ¿Estás diciendo que eventualmente llamaráitem.Equals(target)a cada elemento de la lista y, por lo tanto, tiene exactamente el mismo comportamiento que la respuesta de rokkuchan?Estás accediendo a tu lista dos veces para reemplazar un elemento. Creo que un
forbucle simple debería ser suficiente:fuente
¿Por qué no utilizar los métodos de extensión?
Considere el siguiente código:
El código fuente:
Se han agregado los dos primeros métodos para cambiar los objetos de los tipos de referencia en su lugar. Por supuesto, puede usar solo el tercer método para todos los tipos.
PD Gracias a la observación de Mike , agregué el método ReplaceAll.
fuente
Tes un tipo de referencia o no es irrelevante. Lo que importa es si desea mutar (alterar) la lista o devolver una nueva lista. El tercer método, por supuesto, no alterará la lista original, por lo que no se puede utilizar sólo el tercer método ... . El primer método es el que responde a la pregunta específica formulada. Excelente código: simplemente corrige su descripción de lo que hacen los métodos :)Siguiendo la respuesta de rokkuchan, solo una pequeña actualización:
fuente
Utilice
FindIndexy lambda para buscar y reemplazar sus valores:fuente
Puede usar las siguientes extensiones que se basan en una condición de predicado:
Notas: - En lugar de la extensión ThrowIfArgumentIsNull, puede utilizar un enfoque general como:
Entonces su caso con estas extensiones se puede resolver como:
fuente
No sé si es mejor o no, pero también puedes usarlo.
fuente
O, basándose en la sugerencia de Rusian L., si el artículo que está buscando puede estar en la lista más de una vez:
fuente
Puede usar una expresión lambda como esta.
fuente
encuentro lo mejor para hacerlo rápido y simple
encuentra tu artículo en la lista
hacer un clon de la corriente
Actualizar tu clon
buscar índice en la lista
eliminar artículo fundado en (1)
insertar
fuente