是谓词吗?在 .NET 3.0+ 中不可用;

发布于 2024-08-04 04:45:40 字数 235 浏览 4 评论 0原文

Predicate 在 .NET 中的任何地方都可用吗?来自 MSDN http://msdn.microsoft.com/en-us/library/ bfcke1bz.aspx,我在任何地方都没有看到谓词。我看到一个匿名返回一个布尔值,但没有泛型或“谓词”关键字。

Is Predicate available anywhere in .NET? From MSDN http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx, I don't see a Predicate anywhere. I see an anonymous that returns a boolean but no generics or a "Predicate" keyword.

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

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

发布评论

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

评论(5

眼泪淡了忧伤 2024-08-11 04:45:40

您可以将其用作类型然后将其传入,而不是内联谓词的委托。这是一个示例:

var list = new List<int>();
list.AddRange(Enumerable.Range(1, 10));
Predicate<int> p = delegate(int i)
                   {
                      return i < 5;
                   };
list.RemoveAll(p);
list.ForEach(i => Console.WriteLine(i));

编辑:要使用现有方法声明谓词,您可以使用:

Predicate<int> p = IsLessThanFive;

public bool IsLessThanFive(int number)
{
    return number < 5;
}

替代方案,更常见的是:

list.RemoveAll(delegate(int i) { return i < 5; });
// or...
list.RemoveAll(i => i < 5);

编辑:在另一篇文章的评论中回答您的其他问题,委托是一种定义方法签名的类型,可用于将方法传递给其他人方法作为参数。如果您对 C++ 有一定的了解,它们就像函数指针。有关委托的详细信息,请查看此 MSDN 页面

Rather than inline a delegate for the predicate, you could use it as a type then pass it in. Here's an example:

var list = new List<int>();
list.AddRange(Enumerable.Range(1, 10));
Predicate<int> p = delegate(int i)
                   {
                      return i < 5;
                   };
list.RemoveAll(p);
list.ForEach(i => Console.WriteLine(i));

EDIT: to declare the Predicate with an existing method, you would use:

Predicate<int> p = IsLessThanFive;

public bool IsLessThanFive(int number)
{
    return number < 5;
}

The alternatives, which are more common, would've been:

list.RemoveAll(delegate(int i) { return i < 5; });
// or...
list.RemoveAll(i => i < 5);

EDIT: to answer your other question in a comment to another post, a delegate is a type that defines a method signature and can be used to pass methods to other methods as arguments. If you're somewhat familiar with C++, they are like function pointers. For more info on delegates check out this MSDN page.

青瓷清茶倾城歌 2024-08-11 04:45:40

PredicateSystem 命名空间中的一个类型(更具体地说,是委托类型)。这不是一个关键字。

Predicate is a type (more specifically, a delegate type) in the System namespace. It’s not a keyword.

∝单色的世界 2024-08-11 04:45:40

它肯定是在 3.0 中...请参阅该 MSDN 页面的底部:

版本信息

.NET Framework

受支持的版本:3.5、3.0、2.0

只要您“使用系统”,您就应该看到它。

It is definitely in 3.0... see the bottom of that MSDN page:

Version Information

.NET Framework

Supported in: 3.5, 3.0, 2.0

As long as you are 'using System' you should see it.

猫腻 2024-08-11 04:45:40

MSDN 上的该页面是关于 Predicate(T) 委托的,它正如它所说:

代表定义一个方法
一组标准并确定是否
指定对象满足那些
标准。

That page on MSDN is about the Predicate(T) Delegate, which as it states:

Represents the method that defines a
set of criteria and determines whether
the specified object meets those
criteria.

苹果你个爱泡泡 2024-08-11 04:45:40

谓词类型出现在 3.5 和 4.0 中。

The Predicate Type is there in 3.5 and in 4.0.

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