12

たとえば、メソッドのパラメーターの型でどちらが優れているか (LINQ とは関係ありません)。どうやら Func の方がシンプルでわかりやすいので、より優れているようです。誰もがこれを使用すると、すべてが互換性を持つようになります (良い)。ただし、Microsoft が一部のライブラリ (イベント ハンドラーなど) で独自のデリゲートを使用していることに気付きました。では、それぞれの長所と短所は何ですか?いつ使用すればよいですか?

編集:

  • どうやら Func<> は 3.5 でしか利用できなかったので、これが Func 以外のデリゲートを見た主な理由である可能性があります。Func を使用しない他の理由はありますか? (例:これは .NET4 からのものです)

  • 同じ質問が Action<> にも当てはまります

4

5 に答える 5

5

Func<> は、使用目的が非常に明確で、入力の数が少ない場合に便利です。

入力の数が多い場合、または意図が曖昧な場合は、名前付き引数でデリゲートを使用すると、より明確になります。

于 2010-12-16T07:43:22.340 に答える
1

Func<> と Action<> は、実際に適切である場合に適しています。ランタイムは、プログラムで使用されるすべての型のインスタンスを作成します。一度 Func を使用すると、型のインスタンスが作成されたことを意味します。カスタム デリゲートの場合、物事は別の方法で進行し、基本的に既存のものと似ているにもかかわらず、新しい型が作成されます。

ただし、カスタム デリゲートを使用すると、コードがより明確になる場合があります。

于 2010-12-16T08:15:31.753 に答える
1

Expressionメソッドにパラメーターがある場合を除いて、それらはすべての目的で同じです。これらは、 ではなく「ラムダ」として定義する必要がありdelegateます。IQueryableこれは、代わりに呼び出された/解決されたものを処理して取得する場合に非常に問題になりIEnumerableます (LINQ2SQL など)。

于 2010-12-16T07:57:22.853 に答える
1

ただし、Microsoft が一部のライブラリ (イベント ハンドラーなど) で独自のデリゲートを使用していることに気付きました。では、それぞれの長所と短所は何ですか?いつ使用すればよいですか?

これらの一部は歴史的なものです: C#3/.NET3 でAction<>およびFunc<>が追加される前に定義された API。For events EventHandler<T>は、正しい規則を強制するため、イベントのより良い選択です。

于 2010-12-16T08:51:05.537 に答える
0

n 個の入力をクラス プロパティとして保持するクラスをいつでも作成し、クラスのオブジェクトに func<> デリゲートの単一の入力を渡すことができます。

于 2010-12-16T07:52:08.197 に答える