はじめに

C#では「ラムダ式(lambda expression)」というコーディング記法があります。初めて見ると戸惑う方が多いですが、実はとても便利でコードをスッキリ書ける機能です。
この記事では、C#のラムダ式の基本を解説します。

ラムダ式とは?

ラムダ式は、名前のない関数(匿名関数)を簡単に書くための記法です。
書き方は以下のようになります。

(引数) => 式または処理

例:x => x * 2

上記は「xを受け取って、xを2倍にして返す」という意味です。

(ちなみに、=>は矢印のように見えるため、アロー演算子と呼ばれます。)


基本の使い方

  1. シンプルな例
Func<int, int> doubleFunc = x => x * 2;
Console.WriteLine(doubleFunc(5)); // 出力: 10

Func<int, int> は「intを受け取ってintを返す関数」を表します。


  1. 複数引数の例
Func<int, int, int> addFunc = (a, b) => a + b;
Console.WriteLine(addFunc(3, 4)); // 出力: 7

  1. ステートメント(複数行)の例
Action<string> greet = name =>
{
    var message = $"Hello, {name}!";
    Console.WriteLine(message);
};
greet("Alice"); // 出力: Hello, Alice!

Action<string> は「stringを受け取って戻り値なし(void型)の関数」を表します。


ラムダ式が活躍する場面

  1. LINQとの組み合わせ
var numbers = new List<int> {1, 2, 3, 4, 5};
var evenNumbers = numbers.Where(n => n % 2 == 0);
foreach (var num in evenNumbers)
{
    Console.WriteLine(num); // 出力: 2, 4
}
  1. イベントの登録
button.Click += (sender, e) => Console.WriteLine("ボタンがクリックされました!");
  1. ソート処理
var people = new List<string> {"Charlie", "Alice", "Bob"};
people.Sort((a, b) => a.CompareTo(b));

注意点

  • キャプチャに注意
    ラムダ式内では外側の変数を参照できますが、寿命やスレッドの問題に注意が必要です。

例:

int count = 0;
Action increment = () => count++;
increment();
Console.WriteLine(count); // 出力: 1

まとめ

  • ラムダ式は「簡単に書ける匿名関数」
  • FuncAction を組み合わせて使う
  • LINQ、イベント、ソートなどで大活躍する
  • 外側の変数のキャプチャには注意する