ラムダ式と無名関数(C# WPF)

C#

匿名関数/無名関数

ラムダ式

式形式

右辺が式形式のもの。{}がなく、1行で完結しているようなものがこれに当たる。
右辺の式の結果が返り値になる。

(int i) => i * i;

ステートメント形式

(string s) => { Console.WriteLine(s) };

式の省略

(int i) => { return i * i };
//右辺が単一の式の場合、{}とreturnを省略できる。
(int i) => i * i;
//型が自明の場合、型を省略できる
(i) => i * i;
//引数が1つの場合、()を省略できる
i => i * i;
//逆に引数がない場合は()を省略できない
() => Console.WriteLine("Hoge");

匿名メソッド式

C#2.0からのメソッド。ラムダ式がC#3.0から実装されたので影が薄い。
ラムダ式がほぼ上位互換であり、書き方もよく似ている。

delegate int Hoge(int i)
Hoge fuga() = delegate (int i){ return i * i}

後半の(int i){ return i * i}部分が匿名メソッドです。
ラムダ式と比べて=>ラムダ演算子がないだけですね。
匿名メソッドを使うためにはdelegateに格納してdelegateを呼ぶのですが、その際にdelegateキーワードを匿名メソッドに付ける必要があります。

なお匿名メソッドはパラメータを省略することができるので、返り値がvoidの初期化時には書き方が簡略化できる。

delegate void Hoge(int i)
Hoge fuga() = delegate{}

特段の事情がない限り匿名メソッドを利用するメリットもないので、普段使う分にはラムダ式でいいと思う。

コメント