2010-07-25 9 views
28

Je dois juste préciser que la collection donnée contient un élément.IEnumerable <T> .Contains with predicate

Je peux faire cela via collection.Count(foo => foo.Bar == "Bar") > 0) mais cela va faire le travail inutile - itérer toute la collection pendant que je dois m'arrêter à la première occurrence.

Mais je veux essayer d'utiliser Contains() avec un prédicat, par ex. foo => foo.Bar == "Bar".

Actuellement IEnumerable<T>.Contains a deux signatures:

  • IEnumerable<T>.Contains(T)

  • IEnumerable<T>.Contains(T, IEqualityComparer<T>)

Je dois préciser une variable pour vérifier:

var collection = new List<Foo>() { foo, bar }; 
collection.Contains(foo); 

ou écrire mon habitude IEqualityComparer<Foo> qui sera utilisé contre ma collection:

class FooComparer : IEqualityComparer<Foo> 
{ 
    public bool Equals(Foo f1, Foo f2) 
    { 
     return (f1.Bar == f2.Bar); // my predicate 
    } 

    public int GetHashCode(Foo f) 
    { 
     return f.GetHashCode(); 
    } 
} 

Alors qu'il ya d'autres méthodes pour utiliser prédicat?

Répondre

58
.Any(predicate) 

ressemble à ce que vous voulez; renvoie bool, renvoyant true dès qu'une correspondance est trouvée, sinon false. Il y a aussi:

.All(predicate) 

qui se comporte de la même manière, le retour false dès qu'un non-correspondance est trouvée, sinon true.

8

Vous pouvez utiliser Any(predicate). Il retournera vrai ou faux selon que le prédicat existe dans une certaine collection.

8

Regardez l'extension IEnumerable<T>.Any.

Questions connexes