2

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

4

5 回答 5

5

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

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 页面

于 2009-09-13T18:12:10.970 回答
3

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

于 2009-09-13T17:41:22.750 回答
1

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

版本信息

.NET 框架

支持: 3.5、3.0、2.0

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

于 2009-09-13T17:41:47.380 回答
0

MSDN 上的那个页面是关于 Predicate(T) Delegate 的,它指出:

表示定义一组条件并确定指定对象是否满足这些条件的方法。

于 2009-09-13T17:39:00.380 回答
0

谓词类型在 3.5 和 4.0 中都有。

于 2009-09-13T17:45:38.370 回答