谓词的优点<t>超过Func <t,bool>?</t,bool> </t>

时间:2011-01-04 03:54:49

标签: c# .net delegates

使用谓词而不是普通委托是否有任何价值?以下面的例子为例,我没有看到任何内容。

Predicate<int> isEven = delegate(int x) { return x % 2 == 0; };
Console.WriteLine(isEven(1) + "\r\r");

Func<int, bool> isEven2 = delegate(int x) { return x % 2 == 0; };
Console.WriteLine(isEven(1) + "\r\r");

5 个答案:

答案 0 :(得分:5)

他们实际上是一样的。 Predicate<T>是一个委托类型,它已添加到基类库中,用于列表和数组 Find()方法。这是在LINQ之前,当时引入了更为通用的Func代表系列。您甚至可以编写自己的委托类型并使用它:

delegate bool IntPredicate(int x); 

static void Main()
{
   IntPredicate isEven = delegate(int x) {return x % 2 == 0;};
   Console.WriteLine(isEven(1) + "\r\r");
}

答案 1 :(得分:0)

Predicate是一名代表。它是.Net framework 3.0中定义的委托。谓词总是返回一个布尔值。因此,代码中的两个代表都是等效的。 .Net提供的其他代表是Func和Action。操作返回void。

答案 2 :(得分:0)

只有一堆Microsoft提供的库代码才能使用它。

例如:List.FindAll需要传递Predicate

对于您自己的代码,您可以使用自己喜欢的代码。你甚至可以使用Converter<int, bool>

答案 3 :(得分:0)

他们实际上是一样的。也就是说,扩展方法(在您的个人图书馆或其他人的网站上)更有可能在Func<T, TResult>上定义,所以我更喜欢那个。

答案 4 :(得分:0)

为了与LINQ保持一致,我倾向于在Func<T, bool>上定义Predicate<T>