2009-09-28 6 views

Répondre

24

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.

+0

Vous avez raison, trouvé List.Find, w orks comme un charme. –

+2

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

+1

Pour une réponse courte, pas d'échantillon de code ... La réponse ci-dessous est beaucoup mieux. – Pedro77

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

Vous avez quelques options:

  1. Utilisation Enumerable.Where:

    list.Where(i => i.Property == value).FirstOrDefault();  // C# 3.0+ 
    
  2. 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ées
  • object.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înes
  • object.ReferenceEquals(a,b) des comparaisons d'identité, qui nous ually le plus rapide
+0

oublié de mentionner que je utilise .net v2 –

+2

4 upvotes et en utilisant toujours l'opérateur d'affectation pour comparer les valeurs. Hmm .... –

+1

@Peter - haha, une belle. Il est tôt ici et le compilateur dans mon cerveau est hors service :) –

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

Pour .NET 2.0:

list.Find(delegate(Item i) { return i.Property == someValue; }); 
Questions connexes