目次
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 や小さな処理から、少しずつラムダ式を活用していくと理解が進みやすくなります。