这只是一个好奇心问题,我想知道是否有人对以下问题有一个好的答案:
在.NET Framework类库中,我们有例如以下两种方法:
public static IQueryable<TSource> Where<TSource>(
this IQueryable<TSource> source,
Expression<Func<TSource, bool>> predicate
)
public static IEnumerable<TSource> Where<TSource>(
this IEnumerable<TSource> source,
Func<TSource, bool> predicate
)
为什么他们使用
Func<TSource, bool>
而不是Predicate<TSource>
?好像Predicate<TSource>
只被List<T>
和Array<T>
使用,而Func<TSource, bool>
几乎被所有Queryable
和Enumerable
方法和扩展方法使用...这是怎么回事? 最佳答案
在.net 2.0中,虽然与Predicate
和List<T>
同时引入了Array<T>
,但不同的Func
和Action
变体来自.net 3.5。
因此,这些Func
谓词主要用于LINQ运算符中的一致性。从.net 3.5开始,关于guideline states和Func<T>
的使用: