ラムダ式でデリゲート

プログラミングC# 第6版 5.5


匿名メソッドでデリゲートの続きですね。

using System;

public delegate int CDelegate (int i);

class Program {
    static void Main () {
        CDelegate dobj = (int i) => {
            return i + 1;
        };
        
        Console.WriteLine( dobj(1) );
    }
}
$ main
2

匿名メソッドとほとんど同じですね。

しかしラムダ式の場合はここから更に省略系で書くことができます。まず引数の型は記述しなくても問題ありません。

引数の括弧も省略できます。中括弧内の処理が式のみの場合は中括弧も省略できます。そしてreturnも省略できます。更に更にセミコロンまで省略できます!

つまり以下のようになります!

using System;

public delegate int CDelegate (int i);

class Program {
    static void Main () {
        CDelegate dobj = i => i + 1;
        
        Console.WriteLine( dobj(1) );
    }
}

これは凄いですね。ラムダ式について知らなかったら何を書いてるかさっぱりわかりませんね。

で、こうなってくると匿名メソッドとラムダ式で一体何が違うのかという疑問がでてきますよね。

基本的には匿名メソッドを短く書けるのがラムダ式ってことでいいみたいですが、ラムダ式の方には別の用途もあるみたいです。

式木(Expression Trees) - C# によるプログラミング入門 | ++C++; // 未確認飛行 C

このあたりに詳しく書かれていました。ただ今の時点ではあまり良くわからないので一応違いもあるよってことで終わります。