繁体   English   中英

IEnumerable <T>。包含谓词

[英]IEnumerable<T>.Contains with predicate

我只需要澄清给定的集合包含一个元素。

我可以通过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();
    }   
}

那么有没有其他方法可以使用谓词?

.Any(predicate)

听起来像你想要的; 返回bool ,一找到匹配就返回true ,否则返回false 还有:

.All(predicate)

其行为方式类似,一旦找到不匹配就返回false ,否则为true

您可以使用Any(predicate) 它将返回true或false,具体取决于谓词是否存在于某个集合中。

看一下IEnumerable<T>.Any扩展。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM