【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