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";
Equals
prueba simple , el buen viejoIndexOf
funciona 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
Contains
primero el que necesita repetir todos los elementos (en el peor de los casos), luego está usando elIndexOf
que necesita enumerar los elementos nuevamente.fuente
Equals
o solo encontrará el objeto si es la misma referencia. Tenga en cuenta questring
también es un objeto (tipo de referencia).Equals
y también debe recordar que a veces al mismo tiempo tiene que implementarGetHashCode
GetHashCode
si anula,Equals
peroGetHashCode
solo se usa si el objeto está almacenado en un conjunto (feDictionary
oHashSet
), por lo que no se usa conIndexOf
oContains
, soloEquals
.IndexOf
usaEqualityComparer<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
for
bucle 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
T
es 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
FindIndex
y 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