IEnumerable.Contains方法用于确定序列中是否存在满足指定条件的元素。该方法接受一个谓词参数,用于定义条件。

22 浏览
0 Comments

IEnumerable.Contains方法用于确定序列中是否存在满足指定条件的元素。该方法接受一个谓词参数,用于定义条件。

我只是想澄清一下给定的集合是否包含一个元素。

我可以通过collection.Count(foo => foo.Bar == "Bar") > 0)来做到这一点,但这样会做一些不必要的工作-在我需要停在第一个出现的地方时遍历整个集合。

但我想尝试使用带有谓词的Contains(),例如foo => foo.Bar == "Bar"

目前IEnumerable.Contains有两个签名:

  • IEnumerable.Contains(T)
  • IEnumerable.Contains(T, IEqualityComparer)

所以我必须指定要检查的变量:

var collection = new List() { foo, bar };
collection.Contains(foo);

或者编写自定义的IEqualityComparer,用于对我的集合进行比较:

class FooComparer : IEqualityComparer
{
    public bool Equals(Foo f1, Foo f2)
    {
        return (f1.Bar == f2.Bar); //我的谓词
    }
    public int GetHashCode(Foo f)
    {
        return f.GetHashCode();
    }   
}

所以还有其他使用谓词的方法吗?

0