web-dev-qa-db-ja.com

ラムダ式と無名メソッド

何が違うのか知りたいのですが。現在私はこのことを学んでおり、これらはまったく同じであるように私には思えます:

delegate void X();

X instanceOfX;

instanceOfX = delegate() { code };

instanceOfX = () => { code };

また、ラムダの方が新しい場合は、ラムダを使用して無名メソッドを忘れるだけですか?

26
lojol

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

ただし、いくつかの深い違いがあります。 Eric Lippertの ラムダ式と匿名メソッドの比較、パート1 から始めて、残りの series に進みます。

19
jason

唯一の違いは、ラムダを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
3
kelloti