IEnumerable<T>.Contient avec prédicat

J'ai besoin juste de préciser que, compte tenu de la collection contient un élément.

Je peux le faire via collection.Count(foo => foo.Bar == "Bar") > 0) mais il ne l'inutile emploi - itérer l'ensemble de la collection, alors que j'en ai besoin pour s'arrêter sur la première occurrence.

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

Actuellement IEnumerable<T>.Contains a deux signatures:

  • IEnumerable<T>.Contains(T)

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

Donc je dois spécifier une variable à vérifier:

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

ou écrire à mon habitude IEqualityComparer<Foo> qui sera utilisé à l'encontre de 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 y at-il d'autres méthodes pour utiliser prédicat?

InformationsquelleAutor abatishchev | 2010-07-25