【C#】デリゲートからラムダ式までの流れを総整理する

C#を学習していく中で必須になっていく技術が「ラムダ式」と呼ばれるものです。ラムダ式を理解しなければ、C#を支える重要な機能である「LINQ」を理解するのが難しくなってしまいます。また、LINQを理解すればより効率的なソースコードも書けるようになります。

デリゲート→ラムダ式までの進化

デリゲートからラムダ式までの進化の過程は以下のサンプルで一目瞭然だと思います。

static void Main(string[] args)
{
    var name = "John Doe";


    //匿名メソッド
    TestDelegate func2 = delegate (string s, int i) 
                         { 
                             Console.WriteLine($"Hello,{ s }. It's Func{ i }!");
                         };
    //ラムダ式
    TestDelegate func3 = (s, i) => Console.WriteLine($"Hello,{ s }. It's Func{ i }!");

    //Check each output.
    func0(name, 0);
    func1(name, 1);
    func2(name, 2);
    func3(name, 3);

    //An instruction here.
    Console.WriteLine("Press any key to exit.");
    Console.ReadKey();
}

これらの出力は以下のような感じになります。

Hello,John Doe. It's Func0!
Hello,John Doe. It's Func1!
Hello,John Doe. It's Func2!
Hello,John Doe. It's Func3!
Press any key to exit.

デリゲートからラムダ式でイメージを掴む

ここまで駆け足でデリゲートからラムダ式につながるまでを解説してみました。あまりなじみのないラムダ式は、結局はデリゲートからの派生形であり、C#をより便利に記述するために生まれてきた技術です。ここが理解できていれば良いと思います。

この技術をもとにして生まれてきたのがAction / Predivate / Funcであり、それらはLINQまで繋がっていきます。これらの進化を感じ取ることができれば、難しいと感じていたLINQも理解できるのではないでしょうか。最も重要なことは「デリゲート型の変数にすることで処理を参照できる」ですので忘れないようにしてください。