我需要澄清的是,给定的集合中是否包含一个元素。
我可以通过 collection.Count(foo => foo.Bar == "Bar") > 0)
来实现,但这会做不必要的工作 - 遍历整个集合,而我只需要在第一次出现时停止。
但我想尝试使用带有谓词的 Contains()
,例如 foo => foo.Bar == "Bar"
。
目前 IEnumerable<T>.Contains
有两个签名:
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();
}
}
那么还有其他使用谓词的方法吗?