1. ホーム
  2. c#

[解決済み】なぜPredicate<T>ではなく、Func<T,bool>なのか?

2022-04-10 21:07:18

質問

これは単なる好奇心で、誰か良い答えを持っていないかと思ったのです。

.NET Frameworkのクラス・ライブラリには、例えば次の2つのメソッドがあります。

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 メソッドと拡張メソッド...どうしたんだ?

解決方法は?

一方 Predicate が導入されたのと同時に List<T>Array<T> が、.net 2.0では、異なる FuncAction のバリアントは .net 3.5 から来ています。

そのため、これらの Func 述語は、主にLINQ演算子の一貫性のために使われます。.net 3.5の時点では、LINQの演算子で Func<T>Action<T> その ガイドラインでは :

新しい LINQ タイプを使用する Func<>Expression<> の代わりに、カスタム デリゲートと述語