1. ホーム
  2. c#

[解決済み] Func vs. Action vs. Predicate [重複]について

2022-02-07 17:27:49

質問

実際の例とその使い方で、どなたか理解を深めてください。

  1. が必要なのはどんなとき? Func<T, ..> デリゲート?
  2. どのような場合に Action<T> デリゲート?
  3. が必要なのはどんなとき? Predicate<T> デリゲート?

解決方法は?

との違いは FuncAction は、単にデリゲートに値を返させたいかどうかです( Func を使うか、使わないかです。 Action ).

Func は、おそらく LINQ で最もよく使われるもので、例えばプロジェクションで使われます。

 list.Select(x => x.SomeProperty)

またはフィルタリングを行う。

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

またはキー選択。

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

Action のようなものがより一般的に使用されます。 List<T>.ForEach : リスト内の各項目に対して指定されたアクションを実行します。私はこれを Func とはいえ、私は する などにパラメータレスバージョンを使うことがあります。 Control.BeginInvokeDispatcher.BeginInvoke .

Predicate は、単に特殊なケースに入った Func<T, bool> の前に導入されました。 Func とほとんどの Action 代表がやってきた。もし、すでに FuncAction を、さまざまな形で表現しています。 Predicate 導入されることはなかっただろう...とはいえ する はデリゲートの使用に一定の意味を持たせているのに対し FuncAction は、大きく異なる目的で使用されています。

Predicate は、ほとんどが List<T> のようなメソッドに対して FindAllRemoveAll .