Func <tobject,bool =“”>或Predicate <tobject>?</tobject> </tobject,>

时间:2009-04-18 09:15:19

标签: c# linq delegates lambda

Func<TObject, bool>似乎是一个完全负责任的选项时,我一次又一次地看到使用Predicate<TObject>的API(特别是在.NET框架中)。 API设计师可能会有什么良好的原因?

3 个答案:

答案 0 :(得分: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更具描述性,因此 I 会在没有上述问题的一致性问题的情况下使用它。请注意,只需要了解ActionFunc委托类型,就可以说些什么...

答案 1 :(得分:2)

与LINQ的其余部分保持一致吗?

(已经注意到“异常”,但是使用匿名委托和lambda函数没有区别,所以几乎从不需要了解其中的区别。)

答案 2 :(得分:0)

Func&lt;&gt;委托是指定方法的lambdas / delegates的“新”方式。但是,只有一组方便的委托,如果有一个更具体的委托做同样的事情那么就去做。

在你的例子中,我总是选择Predicate&lt;&gt;因为它更自我记录(假设谓词是你想要的)