Func vs. Action vs. Predicate [重複] 質問する

Func vs. Action vs. Predicate [重複] 質問する

実際の例とその使用法について、どなたか私に理解を助けていただけませんか。

  1. いつ必要になるのかFunc<T, ..>委任しますか?
  2. いつ必要になるのかAction<T>委任しますか?
  3. いつ必要になるのかPredicate<T>委任しますか?

ベストアンサー1

Funcとの違いは、Actionデリゲートが値を返すようにするか ( を使用Func)、返さないか ( を使用Action) という点だけです。

FuncおそらくLINQで最も一般的に使用されるのは、たとえば投影です。

 list.Select(x => x.SomeProperty)

またはフィルタリング:

 list.Where(x => x.SomeValue == someOtherValue)

またはキー選択:

 list.Join(otherList, x => x.FirstKey, y => y.SecondKey, ...)

ActionList<T>.ForEachは、リスト内の各項目に対して指定されたアクションを実行するなどの場合によく使用されます。 よりも使用頻度は低いですFuncが、やなどの場合にパラメータなしのバージョンを使用することがありますControl.BeginInvokeDispatcher.BeginInvoke

Predicateは、実際には特別なケースでありFunc<T, bool>、すべてのFuncおよびほとんどのActionデリゲートが登場する前に導入されました。 および がさまざまな形ですでに存在していた場合、 はFunc導入されなかったのではないかと思います...ただし、 はデリゲートの使用に特定の意味を与えますが、およびは大きく異なる目的で使用されます。ActionPredicateFuncAction

Predicateは主にやList<T>などのメソッドで使用されます。FindAllRemoveAll

おすすめ記事