谓词<t>在.NET 3.0 +中不可用</t>

时间:2009-09-13 17:35:48

标签: .net generics .net-3.5 predicate

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

5 个答案:

答案 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)

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

答案 2 :(得分:1)

绝对是3.0 ...请参阅该MSDN页面的底部:

版本信息

.NET Framework

支持: 3.5,3.0,2.0

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

答案 3 :(得分:0)

That page on MSDN与谓词(T)代表有关,正如其所述:

  

表示定义a的方法   一套标准并确定是否   指定的对象符合这些   标准。

答案 4 :(得分:0)

谓词类型在3.5和4.0中。