例を考えてみましょう:
Func< int , int , int > myLambda = (a, b) => (a + b);
* This source code was highlighted with Source Code Highlighter .
このエントリは、次のコードブロックと同等です。
public static int Add( int a, int b)
{
return a + b;
}
Func< int , int , int > myDelegate = Add;
* This source code was highlighted with Source Code Highlighter .
式の左側の部分が同一であることに気付くかもしれません:
Func< int , int , int > myLambda = (a, b) => (a + b);
Func< int , int , int > myDelegate = Add;
* This source code was highlighted with Source Code Highlighter .
さて、今、適切な部分をよく見ると、1つの機能に気付くことができます。
式の正しい部分を比較します:(a、b)およびAdd。 括弧内に、Addメソッドの引数を示し、(a + b)はAddメソッドの本体です。
つまり、単純な場合、ラムダ「=>」の右側にあるのはメソッドの引数であり、ラムダの後はメソッドの本体です。
引数のないメソッドを想像することもできます:
public static void UseLocal()
{
int n;
Func< int > func = () => { n = 6; return n; };
n = func();
Console .WriteLine(n); // Outputs the number 6
}
* This source code was highlighted with Source Code Highlighter .
まあ、おそらく、それをすべて発音する方法を知らない人のために:(a、b)=> a + bは「a and b go a a plus b」と読みます。
この啓発の後、すべてが明確になりました。ラムダ式を作成する際に例をもう見ないことを望みます:)
そして、ここにソース自体があります: blogs.msdn.com/charlie/archive/2008/06/28/lambdas.aspx
UPD: ここでは、クロージャと発生する問題について読むことができます