2009-04-18 46 views
8

我已经看到了一次又一次的API(特别是在.NET框架中),当Predicate<TObject>看起来是一个完美负责的选项时,它使用Func<TObject, bool>。什么原因可能是一个API设计人员这样做?Func <TObject,bool>或谓词<TObject>?

回答

7

在LINQ,Func<T, bool>被用于诸如Where从而使其他重载这需要索引以及元素是一致的:

IEnumerable<T> Where(IEnumerable<T> source, Func<T, bool> predicate) 
IEnumerable<T> Where(IEnumerable<T> source, Func<T, int, bool> predicate) 

我个人觉得这个名字Predicate是更具描述性的,所以那里是像上面的不连贯问题,我会使用它的情况。请注意,只需要了解有关ActionFunc委托类型的内容就可以这么说了...

2

与其他LINQ的一致性?

(该“异常”已经注意到,但有匿名委托和lambda功能,它没有什么区别,因此几乎从来没有需要注意的差异。)

+0

是的,但是为什么LINQ会这样做? – 2009-04-18 09:21:13

+0

我也不认为与LINQ其余部分的“一致性”是的原因。 – 2009-04-18 09:21:53

0

的Func键<>代表是“新“指定lambda表达式/委托给方法的方式。然而,只有一组方便的代表,如果有一个更具体的代表做同样的事情,那么去那。

在您的例子我总是去作谓语<>,因为它是更自我记录(假设谓词是你想要的)

相关问题