2011-02-08 15 views
26

私は違いが何であるか知りたいです。現在、私はこのようなものを学んでいますし、これらはちょうど同じように、それは私には思える:ラムダが新しい場合ラムダ式対匿名のメソッド

delegate void X(); 

X instanceOfX; 

instanceOfX = delegate() { code }; 

instanceOfX =() => { code }; 

はまた、私は、ラムダを使用し、匿名メソッドに忘れるべきですか?

+3

言語の進化を考えてみましょう。 C#1では、我々は代表者を持っていた。 C#2では、彼らは匿名のメソッドを追加しました。 C#3はラムダを追加しました。類似のタスクを達成するためのより簡単な方法。進化の詳細については、* C#In Depth *の本をチェックすることをお勧めします。 –

答えて

19

はい、ラムダ式は非常に特殊な匿名メソッドです。

しかし、いくつかの大きな違いがあります。 Eric LippertのLambda Expression vs. Anonymous Methods, Part Oneから始め、seriesの残りの部分に進みます。

+6

だから、彼らについて何が特別ですか? – recursive

+0

彼らにとって特別なのは<?ありがとう – lojol

+1

@再帰的:型推論。 – jason

3

唯一の違いはラムダが容易に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 
+1

これはlamdasのサブセットに対してのみ可能であることに注意してください。Expression-lamdasではなく、ステートメントlamdasであることに注意してください。 – CodesInChaos

+3

"Delegate"はデリゲート型のひどい名前です。なぜなら、デリゲート型は基本クラスのSystem.Delegateと簡単に混同されるからです。 –

+3

私はお詫び申し上げます。私は今朝もコーヒーを飲んでいます。正直なところ別の名前は考えられませんでした。 – kelloti

関連する問題