2009-09-28 16 views

risposta

24

Cosa c'è di sbagliato con List.Find ??

Penso che abbiamo bisogno di più informazioni su ciò che hai fatto e perché non ci riesce, prima di poter fornire risposte veramente utili.

+0

Hai ragione, trovato List.Find, w orchi come un fascino. –

+2

Se si utilizza .NET 3.0 o versioni successive, è consigliabile utilizzare LINQ in modo che LINQ funzioni su qualsiasi IEnumerable e IEnumerable . Il metodo di ricerca è specifico per l'elenco e non può essere d'aiuto una volta che si ha a che fare con raccolte diverse. –

+1

Per risposta breve, nessun esempio di codice ... La risposta sotto è molto meglio. – Pedro77

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

avete alcune opzioni:

  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+ 
    

Entrambe queste opzioni restituiscono default(T) (null per i tipi di riferimento) se non viene trovata alcuna corrispondenza.

Come accennato nei commenti qui sotto, è necessario utilizzare l'apposito modulo di confronto per lo scenario:

  • == per i tipi di semplice valore o quando l'uso di overload dell'operatore sono desiderati
  • object.Equals(a,b) per la maggior parte gli scenari in cui il tipo è sconosciuto o confronto è stato eventualmente sovrascritto
  • string.Equals(a,b,StringComparison) per il confronto di stringhe
  • object.ReferenceEquals(a,b) per i confronti di identità, che ci sono ually il più veloce
+0

dimenticato di dire che sto utilizzando .NET v2 –

+2

4 upvotes e ancora utilizzando l'operatore di assegnazione per confrontare i valori. Hmm .... –

+1

@Peter - haha, bello. È presto qui e il compilatore nel mio cervello è fuori servizio :) –

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

Per NET 2.0:

list.Find(delegate(Item i) { return i.Property == someValue; }); 
Problemi correlati