私は違いが何であるか知りたいです。現在、私はこのようなものを学んでいますし、これらはちょうど同じように、それは私には思える:ラムダが新しい場合ラムダ式対匿名のメソッド
delegate void X();
X instanceOfX;
instanceOfX = delegate() { code };
instanceOfX =() => { code };
はまた、私は、ラムダを使用し、匿名メソッドに忘れるべきですか?
私は違いが何であるか知りたいです。現在、私はこのようなものを学んでいますし、これらはちょうど同じように、それは私には思える:ラムダが新しい場合ラムダ式対匿名のメソッド
delegate void X();
X instanceOfX;
instanceOfX = delegate() { code };
instanceOfX =() => { code };
はまた、私は、ラムダを使用し、匿名メソッドに忘れるべきですか?
はい、ラムダ式は非常に特殊な匿名メソッドです。
しかし、いくつかの大きな違いがあります。 Eric LippertのLambda Expression vs. Anonymous Methods, Part Oneから始め、seriesの残りの部分に進みます。
唯一の違いはラムダが容易にExpression<Func<void>>
にキャストできることです。代理人は単なるメソッド/クロージャですが、ラムダも式ツリーに分解されます。
Expression<Func<int, int>> expr = x => x*2; // Expression tree
Func<int, int> fun = x => x*2; // function
delegate int MyDelegate(int x);
MyDelegate del = x => x*2; // Same as function, delegate
これはlamdasのサブセットに対してのみ可能であることに注意してください。Expression-lamdasではなく、ステートメントlamdasであることに注意してください。 – CodesInChaos
"Delegate"はデリゲート型のひどい名前です。なぜなら、デリゲート型は基本クラスのSystem.Delegateと簡単に混同されるからです。 –
私はお詫び申し上げます。私は今朝もコーヒーを飲んでいます。正直なところ別の名前は考えられませんでした。 – kelloti
言語の進化を考えてみましょう。 C#1では、我々は代表者を持っていた。 C#2では、彼らは匿名のメソッドを追加しました。 C#3はラムダを追加しました。類似のタスクを達成するためのより簡単な方法。進化の詳細については、* C#In Depth *の本をチェックすることをお勧めします。 –