我已经看到了一次又一次的API(特别是在.NET框架中),当Predicate<TObject>
看起来是一个完美负责的选项时,它使用Func<TObject, bool>
。什么好原因可能是一个API设计人员这样做?Func <TObject,bool>或谓词<TObject>?
8
A
回答
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
是更具描述性的,所以那里是像上面的不连贯问题,我会使用它的情况。请注意,只需要了解有关Action
和Func
委托类型的内容就可以这么说了...
2
与其他LINQ的一致性?
(该“异常”已经注意到,但有匿名委托和lambda功能,它没有什么区别,因此几乎从来没有需要注意的差异。)
0
的Func键<>代表是“新“指定lambda表达式/委托给方法的方式。然而,只有一组方便的代表,如果有一个更具体的代表做同样的事情,那么去那。
在您的例子我总是去作谓语<>,因为它是更自我记录(假设谓词是你想要的)
相关问题
- 1. 约Func键<TElement,bool>的谓词
- 2. 表达<Func键<T, bool>>谓词两种类型
- 3. 如何从Expression <Func <MyClass,string >>动态创建表达式<Func <MyClass,bool >>谓词?
- 4. 请解释System.Linq.Enumerable.Where(Func <T,int,bool>谓词)
- 5. C# - 委派谓词<T>
- 6. 如何使用此公共IEnumerable <T>查找(表达式<Func <T, bool>>谓词)?
- 7. 如何将表达式<Func <T, bool>>转换为谓词<T>
- 8. 谓词<T>方法equals()方法
- 9. 如何将一个简单的viewmodel转换为Func <T,bool>谓词?
- 10. 温莎城堡的IoC,如何IBaseService <TObject>注册BaseService <TObject的,TRepository>
- 11. 如何撰写Linq表达式?即Func <Exp <Func<X, Y>>,Exp <Func<Y, Z>>,Exp <Func<X, Z> >>
- 12. 表达<Func键<in T, bool>>或表达<Func键<TBase,bool>>表达式<Func<T,bool>>转换器
- 13. 有关扩展的帮助Where()(此IEnumerable <CUSTOMERRow>源,Func <CUSTOMERRow,bool>谓词)
- 14. 检索的性能完整的命名空间中表达<Func<>引用>谓词
- 15. 如何使用Dictionary.Values.Where <TSource>(Func <TSource,bool>谓词)来查找所需的值?
- 16. 10如何从表达式<Func <T, bool>>谓词中获取属性,运算符和值?
- 17. 谓词<Bool>,毫无意义或有用吗?
- 18. 谓词和排序依据,Func键
- 19. 使用Func <>
- 20. 不兼容类型:谓词<CAP#1>不能转换为谓词<?超级CAP#2>
- 21. 结合两个Expression <Func <T, bool>>(“where clause”)和/或
- 22. 传输处理器<TObject>到TNotifyEvent
- 23. 德尔福:RTTI和TObjectList <TObject>
- 24. 表达<Func键<T, bool>>从F#FUNC
- 25. Func <T, dynamic> to Func <TEntity,dynamic>
- 26. 将Func <T, String>转换成Func <T, bool>
- 27. 改变的表达<func<>>
- 28. Expression.LessThan vs LambdaExpression <Func <ParamType,object >>
- 29. 缓存编译<Func<T>>
- 30. 如何Func键<T,bool>转换为表达<Func<T,bool>>
是的,但是为什么LINQ会这样做? – 2009-04-18 09:21:13
我也不认为与LINQ其余部分的“一致性”是好的原因。 – 2009-04-18 09:21:53