特定のコレクションに要素が含まれていることを明確にする必要があります。
collection.Count(foo => foo.Bar == "Bar") > 0)
を介してそれを行うことはできますが、不要な作業を実行します。最初の発生で停止する必要がある間、コレクション全体を繰り返します。
しかし、述語でContains()
を使用してみたいと思います。 _foo => foo.Bar == "Bar"
_。
現在、_IEnumerable<T>.Contains
_には2つの署名があります。
IEnumerable<T>.Contains(T)
IEnumerable<T>.Contains(T, IEqualityComparer<T>)
したがって、チェックする変数を指定する必要があります。
_var collection = new List<Foo>() { foo, bar };
collection.Contains(foo);
_
または、コレクションに対して使用されるカスタム_IEqualityComparer<Foo>
_を記述します。
_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();
}
}
_
では、述語を使用する他の方法はありますか?
.Any(predicate)
あなたが望むもののように聞こえます。 bool
を返し、一致するものが見つかるとすぐにtrue
を返します。それ以外の場合は、false
を返します。もあります:
.All(predicate)
これは同様に動作し、一致しないものが見つかるとすぐにfalse
を返します。それ以外の場合は、true
を返します。
Any(predicate)
を使用できます。述語が特定のコレクションに存在するかどうかに応じて、trueまたはfalseを返します。
IEnumerable<T>.Any
拡張子を見てください。