在.NET中的任何地方都可以使用Predicate吗?从MSDN http://msdn.microsoft.com/en-us/library/bfcke1bz.aspx,我在任何地方都看不到谓词。我看到一个匿名者返回一个布尔值但没有泛型或“Predicate”关键字。
答案 0 :(得分: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,您可以使用:
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 ++有点熟悉,它们就像函数指针一样。有关代表的更多信息,请查看this MSDN page。
答案 1 :(得分:3)
Predicate
是System
命名空间中的类型(更具体地说,是委托类型)。它不是关键字。
答案 2 :(得分:1)
绝对是3.0 ...请参阅该MSDN页面的底部:
支持: 3.5,3.0,2.0
只要您“使用系统”,就应该看到它。
答案 3 :(得分:0)
That page on MSDN与谓词(T)代表有关,正如其所述:
表示定义a的方法 一套标准并确定是否 指定的对象符合这些 标准。
答案 4 :(得分:0)
谓词类型在3.5和4.0中。