【1】ラムダ式
* メソッドを宣言することなく、簡略化にして記述できる
【2】比較
例1:メンバーの値を返す場合
[1] 従来の書き方
// メソッドを普通に記述 int GetAge(Person p) { return p.Age; }
[2] ラムダ式
// メソッドをラムダ式で記述 // ※ 引数を1つの場合、括弧は省略できる(p => p.Age) (p) => p.Age
例2:判定結果を返す場合
[1] 従来の書き方
// メソッドを普通に記述 bool IsMale(Person p) { return p.Sex == "Male"; }
[2] ラムダ式
// メソッドをラムダ式で記述 // ※ 引数を1つの場合、括弧は省略できる(p => p.Sex == "Male" ) (p) => p.Sex == "Male"
【3】基本構文
左辺 => 右辺 左辺 => 式 左辺 => { 文; 文; 文; } * デリゲートとして呼び出されるメソッドのパラメータが入る
[1] 左辺
* 基本的にパラメータは ( ) で囲む必要がある * パラメータが1つのみの場合は、( ) は省略可能 * パラメータが複数の場合、各パラメータは「,」で区切る
[2] 右辺
* 式か文を指定する * 式の最後には、セミコロン(;)を付けない * 文は必ず { } (=ブロック)で囲む * 文において、戻り値が必要な場合には、 returnキーワードで返却する値を明記
[3] =>演算子
* 「goes to」(ゴーズ・トゥ)と読む) * 「左辺のパラメータを入力して、右辺を実行する」って意味らしい * ラムダ式を表す演算子として使用
【4】サンプル
例1
delegate int Plus(int a, int b); static void Output(Plus f) { MessageBox.Show(string.Format("1 + 2 = {0}", f(1, 2))); } private void button1_Click(object sender, EventArgs e) { // 出力:Output by double: 123 Output((a, b) => { return a + b; }); }
参考資料
http://www.atmarkit.co.jp/fdotnet/rapidmaster/rapidmaster_01/rapidmaster_01.html
例2
delegate void PrintCounter(int number); static void Main(string[] args) { PrintCounter printer = new PrintCounter(x => Console.WriteLine(string.Format("Counter:{0}.", x))); for (int i = 1; i <= 10; i++) { printer(i); } }
関連記事
C# ~ Linq / 入門編 ~
https://dk521123.hatenablog.com/entry/2010/08/04/152046