ラムダ式とは

C# ラムダ式入門(.NET 8 対応)

C# のラムダ式は、.NET 3.5 以降ずっと使われてきた機能ですが、.NET 8 でも LINQ や最小 API(Minimal API)などで日常的に登場する、非常に重要な構文です。
本記事では、.NET 8 を前提としつつ「基本 → 応用 → 代表的な使い方」までを整理します。


1. ラムダ式とは?

ラムダ式とは「名前のない小さなメソッド(無名メソッド)」を、簡潔な記法で書くための構文です。

イメージとしては「メソッドの中に、その場でサッと書けるメソッド」です。

1-1. 具体例


2. 基本の書き方

2-1. パラメータと矢印 =>

ラムダ式は以下の形です。

パラメータが1つの場合

パラメータが複数の場合

パラメータなしの場合


3. 式ラムダとステートメントラムダ

ラムダ式の「本体」の書き方には、2種類あります。

3-1. 式ラムダ(expression-bodied)

戻り値が 1 つの「式」で表せる場合に使います。

3-2. ステートメントラムダ(statement-bodied)

複数行の処理を行いたい場合、{ } で囲んで通常のメソッドのように書きます。

return が必要になる点に注意してください(式ラムダでは return は不要)。


4. 型推論と Func / Action

4-1. デリゲートとラムダ式

C# のラムダ式は、デリゲート(メソッドへの参照)に代入して使うことが多いです。
代表的な汎用デリゲートが Func<>Action<> です。

  • Func<T1, T2, ..., TResult>
    最後の型が戻り値(TResult)、それ以外が引数の型です。
  • Action<T1, T2, ...>
    戻り値が void のデリゲートです。

4-2. 例:Func の使用

4-3. 例:Action の使用


5. 変数キャプチャ(クロージャ)

ラムダ式は、外側のスコープの変数を「捕まえて」使うことができます。これをクロージャと呼びます。

factor はラムダ式の外にある変数ですが、ラムダ式の中でも使用できます。
ただし、ループの中でキャプチャする場合などは挙動に注意が必要です。


6. 代表的な利用シーン

6-1. LINQ での利用

LINQ(Language Integrated Query)でラムダ式は頻出します。

6-2. ソート処理(Sort / OrderBy

6-3. イベントハンドラー

イベントハンドラーも、ラムダ式で簡潔に書けます。


7. .NET 8 とラムダ式の活用例(Minimal API)

.NET 6 以降で導入された Minimal API では、ラムダ式をそのまま HTTP ハンドラとして利用することが多く、.NET 8 でも基本的な使い方は同じです。

ここでは () => "Hello, World!"(int x, int y) => { ... } がラムダ式として機能しています。


8. よくある注意点

8-1. デバッグが難しくなる場合がある

ラムダ式をネストしすぎると、処理の追跡が難しくなります。
複雑になりすぎた場合は、通常のメソッドとして切り出した方が読みやすくなります。

❌ 悪い例(1つのラムダに詰め込みすぎ)

✅ 良い例(メソッド化して読みやすく分割)

8-2. クロージャによる予期せぬ挙動

ループ内で変数をキャプチャする際は、意図しない値が使われることがあります。
C# 5 以降は改善されていますが、外側変数を書き換えるようなケースでは挙動を確認しておくと安全です。


9. まとめ

  • ラムダ式は「名前のないメソッド」を簡潔に書くための構文。
  • => を使い、(パラメータ) => 本体 の形で記述する。
  • 式ラムダ(1行)とステートメントラムダ(複数行)がある。
  • Func<> / Action<> と組み合わせて使うのが基本。
  • LINQ・イベント・Minimal API など、.NET 8 でも多くの場面で必須。

ラムダ式を使いこなすことで、C# / .NET のコードをより短く、読みやすく書けるようになります。
まずは LINQ や小さな処理から、少しずつラムダ式を活用していくと理解が進みやすくなります。