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;
それらの違いは何ですか?
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;
それらの違いは何ですか?
それらはすべて同じです-同じものにコンパイルされる構文糖衣だけです。
つまり、型推論やその他のコンパイラの優れた機能を使用すると、3 は 1 を表す非常に短い方法にすぎません。
それらはすべて同じです。最初の 2 つは匿名メソッドの例です。最後はラムダ式の例です。匿名メソッドとラムダ式は総称して匿名関数と呼ばれます。
匿名メソッドは C# 2 で導入されました。ラムダ式は C# 3 で導入され、匿名メソッドの大部分が置き換えられました。ラムダ式は、デリゲートだけでなく、コードを IL ではなくデータとして表す式ツリーにも変換できることに注意してください。
などはデリゲート型の単なる例であることFunc<TResult>
に注意してください。Func<T, TResult>
匿名関数は、互換性のある任意のデリゲート型に変換できます。例えば:
public delegate int Foo(string x);
Foo foo = text => text.Length;