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?
Vous devez vous connecter pour publier un commentaire.
sonne comme ce que vous voulez; retourne
bool
, de retourtrue
dès qu'une correspondance est trouvée, d'autrefalse
. Il y a aussi:qui se comporte de manière similaire, le retour
false
dès qu'une non-correspondance est trouvée, d'autretrue
.Ont un look à la
IEnumerable<T>.Any
extension.Vous pouvez utiliser
Any(predicate)
.Elle renvoie true ou false selon si le prédicat dans une certaine collection.