Ho una lista che contiene una raccolta di oggetti.Trovare un elemento in un elenco <> utilizzando C#
Come posso cercare un articolo in questo elenco dove object.Property == myValue
?
Ho una lista che contiene una raccolta di oggetti.Trovare un elemento in un elenco <> utilizzando C#
Come posso cercare un articolo in questo elenco dove object.Property == myValue
?
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.
item = objects.Find(obj => obj.property==myValue);
avete alcune opzioni:
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+
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 desideratiobject.Equals(a,b)
per la maggior parte gli scenari in cui il tipo è sconosciuto o confronto è stato eventualmente sovrascrittostring.Equals(a,b,StringComparison)
per il confronto di stringheobject.ReferenceEquals(a,b)
per i confronti di identità, che ci sono ually il più velocedimenticato di dire che sto utilizzando .NET v2 –
4 upvotes e ancora utilizzando l'operatore di assegnazione per confrontare i valori. Hmm .... –
@Peter - haha, bello. È presto qui e il compilatore nel mio cervello è fuori servizio :) –
var myItem = myList.Find(item => item.property == "something");
Per NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
Hai ragione, trovato List.Find, w orchi come un fascino. –
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. –
Per risposta breve, nessun esempio di codice ... La risposta sotto è molto meglio. – Pedro77