8

1 :

Func<int, int> myFunc = new Func<int,int>(delegate(int x) {
    return x + 1;
});

2 :

Func<int, int> myFunc = delegate(int x) {
    return x + 1;
};

3 :

Func<int, int> myFunc = x => x + 1;

それらの違いは何ですか?

4

2 に答える 2

8

それらはすべて同じです-同じものにコンパイルされる構文糖衣だけです。

つまり、型推論やその他のコンパイラの優れた機能を使用すると、3 は 1 を表す非常に短い方法にすぎません。

于 2013-02-23T15:09:15.580 に答える
7

それらはすべて同じです。最初の 2 つは匿名メソッドの例です。最後はラムダ式の例です。匿名メソッドとラムダ式は総称して匿名関数と呼ばれます。

匿名メソッドは C# 2 で導入されました。ラムダ式は C# 3 で導入され、匿名メソッドの大部分が置き換えられました。ラムダ式は、デリゲートだけでなく、コードを IL ではなくデータとして表す式ツリーにも変換できることに注意してください。

などはデリゲート型の単なる例であることFunc<TResult>に注意してください。Func<T, TResult>匿名関数は、互換性のある任意のデリゲート型に変換できます。例えば:

public delegate int Foo(string x);

Foo foo = text => text.Length;
于 2013-02-23T15:10:09.690 に答える