当Func<TObject, bool>
似乎是一个完全负责任的选项时,我一次又一次地看到使用Predicate<TObject>
的API(特别是在.NET框架中)。 API设计师可能会有什么良好的原因?
答案 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 会在没有上述问题的一致性问题的情况下使用它。请注意,只需要了解Action
和Func
委托类型,就可以说些什么...
答案 1 :(得分:2)
与LINQ的其余部分保持一致吗?
(已经注意到“异常”,但是使用匿名委托和lambda函数没有区别,所以几乎从不需要了解其中的区别。)
答案 2 :(得分:0)
Func&lt;&gt;委托是指定方法的lambdas / delegates的“新”方式。但是,只有一组方便的委托,如果有一个更具体的委托做同样的事情那么就去做。
在你的例子中,我总是选择Predicate&lt;&gt;因为它更自我记录(假设谓词是你想要的)