Tengo una lista que contiene una colección de objetos.Encontrar un elemento en una lista <> con C#
¿Cómo puedo buscar un artículo en la lista donde object.Property == myValue
?
Tengo una lista que contiene una colección de objetos.Encontrar un elemento en una lista <> con C#
¿Cómo puedo buscar un artículo en la lista donde object.Property == myValue
?
¿Qué pasa con List.Find ??
Creo que necesitamos más información sobre lo que ha hecho, y por qué falla, antes de que podamos proporcionar respuestas realmente útiles.
item = objects.Find(obj => obj.property==myValue);
Usted tiene algunas opciones:
Uso Enumerable.Where:
list.Where(i => i.Property == value).FirstOrDefault(); // C# 3.0+
Uso List.Find:
list.Find(i => i.Property == value); // C# 3.0+
list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
Ambas opciones devuelven default(T)
(null
para tipos de referencia) si no se encuentra ninguna coincidencia.
Como se mencionó en los comentarios a continuación, se debe utilizar la forma adecuada de comparación para su escenario:
==
para este tipo de valor simple o donde se desea el uso de sobrecargas de operadoresobject.Equals(a,b)
para la mayoría de escenarios donde el tipo es desconocido o comparación potencialmente se ha reemplazadostring.Equals(a,b,StringComparison)
para las cadenas que comparanobject.ReferenceEquals(a,b)
para las comparaciones de identidad, que nos son ually el más rápidose olvidó de mencionar que estoy usando .net v2 –
4 upvotes y sigue utilizando el operador de asignación para comparar los valores. Hmm ... –
@Peter - jaja, buena. Es temprano aquí y el compilador en mi cerebro está fuera de servicio :) –
var myItem = myList.Find(item => item.property == "something");
para .NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
Tienes razón, encontraste List.Find, w te gusta el encanto. –
Si está utilizando .NET 3.0 o posterior, debe favorecer el modo LINQ porque LINQ funciona en cualquier IEnumerable e IEnumerable. Find-Method es específico para la Lista y no puede ayudarlo una vez que tenga que tratar con diferentes colecciones. –
Para una respuesta corta, no muestra código ... La respuesta a continuación es mucho mejor. – Pedro77