Это просто вопрос любопытства. Мне было интересно, есть ли у кого хороший ответ:
В библиотеке классов .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 и методами расширения... что с этим?