【C#】C# ~ ラムダ式 ~

【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