2009-09-28 35 views

Respuesta

24

¿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.

+0

Tienes razón, encontraste List.Find, w te gusta el encanto. –

+2

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. –

+1

Para una respuesta corta, no muestra código ... La respuesta a continuación es mucho mejor. – Pedro77

0
item = objects.Find(obj => obj.property==myValue); 
97

Usted tiene algunas opciones:

  1. Uso Enumerable.Where:

    list.Where(i => i.Property == value).FirstOrDefault();  // C# 3.0+ 
    
  2. 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 operadores
  • object.Equals(a,b) para la mayoría de escenarios donde el tipo es desconocido o comparación potencialmente se ha reemplazado
  • string.Equals(a,b,StringComparison) para las cadenas que comparan
  • object.ReferenceEquals(a,b) para las comparaciones de identidad, que nos son ually el más rápido
+0

se olvidó de mencionar que estoy usando .net v2 –

+2

4 upvotes y sigue utilizando el operador de asignación para comparar los valores. Hmm ... –

+1

@Peter - jaja, buena. Es temprano aquí y el compilador en mi cerebro está fuera de servicio :) –

2
var myItem = myList.Find(item => item.property == "something"); 
0

para .NET 2.0:

list.Find(delegate(Item i) { return i.Property == someValue; }); 
Cuestiones relacionadas