IEnumerable.包含谓词

发布于 2024-09-11 06:59:49 字数 983 浏览 12 评论 0原文

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

我可以通过 collection.Count(foo => foo.Bar == "Bar") > 来做到这一点0) 但它会做不必要的工作 - 迭代整个集合,而我需要在第一次出现时停止。

但我想尝试将 Contains() 与谓词一起使用,例如 foo =>; foo.Bar ==“酒吧”

目前 IEnumerable.Contains 有两个签名:

  • IEnumerable.Contains(T)

  • IEnumerable.Contains(T, IEqualityComparer)

    IEnumerable.Contains

所以我必须指定一些变量来检查:

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

或者编写我的自定义 IEqualityComparer 它将用于我的集合:

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();
    }   
}

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

I need just to clarify that given collection contains an element.

I can do that via collection.Count(foo => foo.Bar == "Bar") > 0) but it will do the unnecessary job - iterate the whole collection while I need to stop on the first occurrence.

But I want to try to use Contains() with a predicate, e.g. foo => foo.Bar == "Bar".

Currently IEnumerable<T>.Contains has two signatures:

  • IEnumerable<T>.Contains(T)

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

So I have to specify some variable to check:

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

or write my custom IEqualityComparer<Foo> which will be used against my collection:

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();
    }   
}

So are there any other methods to use predicate?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

三月梨花 2024-09-18 06:59:50
.Any(predicate)

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

.All(predicate)

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

.Any(predicate)

sounds like what you want; returns bool, returning true as soon as a match is found, else false. There is also:

.All(predicate)

which behaves in a similar way, returning false as soon as a non-match is found, else true.

不打扰别人 2024-09-18 06:59:50

查看 IEnumerable.Any 扩展。

Have a look at the IEnumerable<T>.Any extension.

彼岸花似海 2024-09-18 06:59:50

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

You can use Any(predicate).
It will return true or false depending if the predicate exists in a certain collection.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文