这只是一个好奇心问题,我想知道是否有人对以下问题有一个好的答案:

在.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>几乎被所有QueryableEnumerable方法和扩展方法使用...这是怎么回事?

最佳答案

在.net 2.0中,虽然与PredicateList<T>同时引入了Array<T>,但不同的FuncAction变体来自.net 3.5。
因此,这些Func谓词主要用于LINQ运算符中的一致性。从.net 3.5开始,关于guideline statesFunc<T>的使用:

10-08 04:30