【发布时间】:2011-03-20 17:11:24
【问题描述】:
我只需要澄清给定的集合包含一个元素。
我可以通过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();
}
}
那么还有其他使用谓词的方法吗?
【问题讨论】:
标签: c# linq ienumerable contains predicate