C# のラムダ式

C# のラムダ式とは?

ラムダ式 (lambda expression) は無名のメソッドを簡単に記述する方法です。

ラムダ式は次の形式になります。

(パラメータリスト) => 式 または ステートメントブロック

例えば、パラメータ xy を取り、足して返すラムダ式は次のように書けます。

(x, y) => x + y;

ラムダ式はデリゲートとして作成されます。 このため .NET のビルトインのジェネリックデリゲートの Action や Func として作成できます。

Action や Func などの .NET ビルトインのジェネリックデリゲートについては「C# のジェネリックデリゲート」をご覧ください。

C# のラムダ式の簡単な例

次の例では int 型の xy を受け取り、それらを足して int 型の値の結果を返すラムダ式を作成し利用しています。

using System;
using static System.Console;

class Program
{
  static void Main(string[] args)
  {
    Func<int, int, int> a = (x, y) => x + y;
    WriteLine(a(3, 5)); // 8
  }
}

ラムダ式のパラメータリストの型指定は省略可能ですが、記載することもできます。また、return を明示的に書くこともできます。

using System;
using static System.Console;

class Program
{
  static void Main(string[] args)
  {
    Func<int, int, int> a = (int x, int y) =>
    {
      return x + y;
    };
    WriteLine(a(3, 5)); // 8
  }
}

上記のラムダ式は次の匿名メソッドと同じです。

Func<int, int, int> a = delegate (int x, int y)
{
  return x + y;
};

ラムダ式が複数の文からなる (ステートメントブロックとなる) 場合は,次のように { } で本体を書きます。

Func<int, int, int> a = (x, y) =>
{
  WriteLine("a called");
  return x + y;
};

ラムダ式では必ずしも戻り値を必要とはしません。

using System;
using static System.Console;

class Program
{
  static void Main(string[] args)
  {
    Action<int, int> a = (x, y) =>
    {
      WriteLine($"{x}+{y}={x + y}");
    };
    a(3, 5); // 3+5=8
  }
}

C# のラムダ式とローカル変数

ローカル変数を用いてラムダ式を作成した場合、ローカル変数の値が変わればラムダ式が返す値も変わります。

using System;
using static System.Console;

class Program
{
  static void Main(string[] args)
  {
    double r = 1.0;
    Func<double> area = () => Math.PI * r * r;
    WriteLine($"{area():F3}"); // 3.14
    r = 2.0;
    WriteLine($"{area():F3}"); // 12.566
  }
}

ここまでお読みいただき、誠にありがとうございます。SNS 等でこの記事をシェアしていただけますと、大変励みになります。どうぞよろしくお願いします。

© 2024 C# 入門