J'ai une liste qui contient une collection d'objets.Recherche d'un élément dans une liste <> en utilisant C#
Comment puis-je rechercher un élément dans cette liste où object.Property == myValue
?
J'ai une liste qui contient une collection d'objets.Recherche d'un élément dans une liste <> en utilisant C#
Comment puis-je rechercher un élément dans cette liste où object.Property == myValue
?
Quel est le problème avec List.Find ??
Je pense que nous avons besoin de plus d'informations sur ce que vous avez fait, et pourquoi il ne fonctionne pas, avant que nous puissions apporter des réponses vraiment utiles.
item = objects.Find(obj => obj.property==myValue);
Vous avez quelques options:
Utilisation Enumerable.Where:
list.Where(i => i.Property == value).FirstOrDefault(); // C# 3.0+
Utilisation List.Find:
list.Find(i => i.Property == value); // C# 3.0+
list.Find(delegate(Item i) { return i.Property == value; }); // C# 2.0+
Ces deux options reviennent default(T)
(null
pour les types de référence) si aucune correspondance est trouvée.
Comme mentionné dans les commentaires ci-dessous, vous devez utiliser le formulaire de comparaison approprié pour votre scénario:
==
pour les types de valeur simple, ou lorsque l'utilisation de la surcharge de l'opérateur sont souhaitéesobject.Equals(a,b)
pour la plupart des scénarios où le type est inconnu ou la comparaison a potentiellement été remplacéstring.Equals(a,b,StringComparison)
pour comparer les chaînesobject.ReferenceEquals(a,b)
des comparaisons d'identité, qui nous ually le plus rapideoublié de mentionner que je utilise .net v2 –
4 upvotes et en utilisant toujours l'opérateur d'affectation pour comparer les valeurs. Hmm .... –
@Peter - haha, une belle. Il est tôt ici et le compilateur dans mon cerveau est hors service :) –
var myItem = myList.Find(item => item.property == "something");
Pour .NET 2.0:
list.Find(delegate(Item i) { return i.Property == someValue; });
Vous avez raison, trouvé List.Find, w orks comme un charme. –
Si vous utilisez .NET 3.0 ou version ultérieure, vous devez privilégier la méthode LINQ, car LINQ fonctionne sur tout IEnumerable et IEnumerable. La méthode de recherche est spécifique à la liste et ne peut pas vous aider une fois que vous avez à gérer différentes collections. –
Pour une réponse courte, pas d'échantillon de code ... La réponse ci-dessous est beaucoup mieux. – Pedro77