このシリーズも気がつけば第5弾。
今回は、C#の条件分岐をさらに進化させる「when節」と、パターンマッチングの組み合わせ技を紹介します。
これまで紹介してきた switch式 や is パターンだけでも十分便利でしたが、「条件付きでパターンマッチしたい」場面では、この when が輝きます。
そもそも when 節って何?
when は switch 文や switch式 のケースに追加の条件を付けるための節です。
「この型だけど、さらにこういう条件のときだけ」――そんなときに活躍します。
🗂️ 普通バージョン
if (person is Student)
{
    var student = (Student)person;
    if (student.Grade >= 80)
    {
        Console.WriteLine("Honor student");
    }
}オブジェクトpersonがStudent型の場合、ローカル変数studentにキャストしてからGradeの値を調べ、80以上なら「名誉生徒」であると出力する。
これ、読み慣れていれば問題ありませんが、型チェック+キャスト+条件の組み合わせでネストが深くなります。
👑パターン+when節で書き直したバージョン
string GetStudentStatus(object person) => person switch
{
    Student s when s.Grade >= 80 => "Honor student",
    Student => "Regular student",
    _ => "Not a student"
};このswitch式の意味を解説します。
- personが- Student型かつ- Grade >= 80→- "Honor student"
- personが- Student型(条件なし)→- "Regular student"
- その他 → "Not a student"
順に条件を評価し、最初にマッチしたものが適用されます。
注意点とポイント
- whenは後出し条件です。まずパターンマッチしてから、追加条件を評価します。
- switch式では順番が重要。上に書いた条件が優先されます。
- if文に比べて意図が明確になることが多いですが、複雑になりすぎると逆に読みにくくなることもあります。
まとめ
| 処理内容 | 普通の書き方 | パターン+whenで書くと | 
|---|---|---|
| 型チェック+条件 | if (x is T t && 条件) | 同左(パターン内で完結) | 
| switchで条件を分けたい | switch { case T t: if(条件) return ... } | T t when 条件 => 値 | 
次回予告:LINQとラムダにも潜む、省略形の誘惑
次回は、if を離れて、LINQクエリやラムダ式に登場する省略形をピックアップ予定です。Where(x => ...) や Select(...) など、よく使うけど、意外と曖昧に書いてる部分を整理していきます。
それではまた、よりスッキリとした分岐の世界でお会いしましょう。
 
  
  
  
  

