カテゴリ: C# 更新日: 2025/11/30

C#のパターンマッチングの基本!switch文の進化系を理解しよう

C#のパターンマッチングの基本!switch文の進化系を理解しよう
C#のパターンマッチングの基本!switch文の進化系を理解しよう

先生と生徒の会話形式で理解しよう

生徒

「C#のswitch文って知ってますけど、最近はもっと進化した使い方があるって聞きました。どういうことですか?」

先生

「良いところに目をつけましたね!最近のC#では『パターンマッチング』という機能を使って、switch文がもっと柔軟に使えるようになったんですよ。」

生徒

「それは便利そうですね!どうやって使うんですか?」

先生

「それでは、C#のパターンマッチングと進化したswitch文の基本を一緒に学んでいきましょう!」

1. パターンマッチングとは?

1. パターンマッチングとは?
1. パターンマッチングとは?

パターンマッチング(Pattern Matching)とは、「値がどんな形をしているか」「どの型に当てはまるか」などを判定して、それに応じた処理を行う方法のことです。

従来のswitch文は、「特定の値と一致しているか」を見るだけでしたが、C# 7.0以降では、型判定nullチェック、条件つき分岐など、より細かい判定ができるようになりました。

2. 型パターンを使ったswitch文の書き方

2. 型パターンを使ったswitch文の書き方
2. 型パターンを使ったswitch文の書き方

パターンマッチングの一つに「型パターン」があります。これは、ある値が特定の型かどうかを調べて、その型で処理を行うものです。

以下の例では、object型の変数にいろいろな型の値が入っているとして、それぞれの型に応じたメッセージを表示します。


object value = 123;

switch (value)
{
    case int i:
        Console.WriteLine($"整数です: {i}");
        break;
    case string s:
        Console.WriteLine($"文字列です: {s}");
        break;
    case null:
        Console.WriteLine("値はnullです");
        break;
    default:
        Console.WriteLine("その他の型です");
        break;
}

整数です: 123

3. 条件パターン(when句)を使ってさらに詳しく分ける

3. 条件パターン(when句)を使ってさらに詳しく分ける
3. 条件パターン(when句)を使ってさらに詳しく分ける

さらに細かく条件を分けたいときは、when句を使うことで、値に対して追加の条件をつけることができます。


object value = 75;

switch (value)
{
    case int i when i < 50:
        Console.WriteLine("50未満の整数です");
        break;
    case int i when i >= 50 && i <= 100:
        Console.WriteLine("50以上100以下の整数です");
        break;
    case int i:
        Console.WriteLine("100より大きい整数です");
        break;
    default:
        Console.WriteLine("整数以外の値です");
        break;
}

50以上100以下の整数です

4. 複数のパターンをまとめて書く「ORパターン」

4. 複数のパターンをまとめて書く「ORパターン」
4. 複数のパターンをまとめて書く「ORパターン」

C# 9.0からは、「ORパターン(またはパターン)」が使えるようになり、複数の条件をorでまとめて判定できるようになりました。


char c = 'A';

switch (c)
{
    case 'A' or 'E' or 'I' or 'O' or 'U':
        Console.WriteLine("母音です");
        break;
    default:
        Console.WriteLine("子音です");
        break;
}

母音です

5. switch式を使ってもっと簡潔に書く

5. switch式を使ってもっと簡潔に書く
5. switch式を使ってもっと簡潔に書く

C# 8.0からは、switchを式として使えるswitch式が導入されました。これを使うと、よりシンプルで読みやすいコードを書くことができます。


int score = 85;
string result = score switch
{
    >= 90 => "とても良い",
    >= 70 => "良い",
    >= 50 => "ふつう",
    _     => "がんばろう"
};

Console.WriteLine(result);

良い

このように、switch式では=>を使って「条件 → 処理内容」という形で書けるので、分かりやすくなっています。

6. パターンマッチングの活用シーン

6. パターンマッチングの活用シーン
6. パターンマッチングの活用シーン

パターンマッチングは、以下のような場面で活躍します:

  • オブジェクトの型によって処理を切り替えるとき
  • nullや特定の条件を含む複雑な分岐が必要なとき
  • switch式で短く、読みやすいコードを書きたいとき

初心者でも、nullのチェックなどが簡単に書けるので、ぜひ使いこなせるように練習してみましょう。

まとめ

まとめ
まとめ

C#のパターンマッチングは、従来のswitch文をさらに柔軟に、そして読みやすく進化させた機能です。型の判定だけでなく、nullの扱いや条件付きの分岐、さらに複数条件をまとめて書けるorパターン、そしてswitch式による簡潔な記述まで、近年のC#は非常に表現力豊かな言語へと成長しています。

特に、object型のように中身の型が不明な変数を安全に扱いたい場面では、型パターンが大活躍します。しかも、when句を使えば追加の条件も加えられるので、実務でも「型と条件で処理を分けたい」というニーズにぴったり応えてくれます。

また、orパターンの導入によって、例えば複数の文字をひとまとめにチェックする場面などではコードが劇的に読みやすくなります。さらに、switch式を活用すれば、変数への代入処理も簡潔に行えるようになり、プログラム全体の見通しが良くなります。

このように、パターンマッチングは単なる文法の拡張にとどまらず、保守性の向上バグの減少にもつながる、重要な機能です。まだ使ったことがない方も、ぜひ簡単なサンプルから慣れていきましょう。

switch式の活用例

ここでは、パターンマッチングとswitch式を組み合わせた応用的な例を紹介します。


object item = 42;

string description = item switch
{
    int i when i % 2 == 0 => "偶数の整数です",
    int i => "奇数の整数です",
    string s => $"文字列:{s}",
    null => "値はnullです",
    _ => "その他の型です"
};

Console.WriteLine(description);

偶数の整数です

この例では、int型かつ偶数という条件をwhenで分岐しています。
型と条件を組み合わせることで、より精密なロジックを短く表現できるのが特徴です。

先生と生徒の振り返り会話

生徒

「先生、C#のswitch文って、昔はただの値の比較しかできないと思ってました。でも、今は型や条件で分けられるんですね!」

先生

「その通りです。特にwhen句やswitch式を使うと、ずいぶんスッキリしたコードになりますよね。」

生徒

「型のチェックとか、nullの扱いがすごく自然に書けるのが驚きでした。実務でよく使う場面が多そうです。」

先生

「まさにそうです。Webアプリの入力バリデーションや、APIのレスポンス処理なんかでも、パターンマッチングはよく使われます。」

生徒

「ORパターンも便利ですね。母音かどうかの判定とか、これまではif文で書いてたところが短く書けました。」

先生

「C#は毎回のバージョンアップで確実に書きやすくなっています。ぜひこの機会に、パターンマッチングを自分のコードに取り入れてみましょう。」

カテゴリの一覧へ
新着記事
New1
C#
C#のデフォルト引数と名前付き引数の使い方を解説!初心者でも安心のやさしい入門
New2
C#
C#のオブジェクト初期化子を完全ガイド!初心者でもわかる便利な使い方
New3
COBOL
COBOLの帳票出力と編集を完全マスター!条件付き表示で分かりやすい書類を作る方法
New4
COBOL
COBOLの帳票出力を完全攻略!数値項目のカンマ・小数点編集例を徹底解説
人気記事
No.1
Java&Spring記事人気No1
C#
C#のpartialクラスとは?初心者でも理解できるクラス分割の基本
No.2
Java&Spring記事人気No2
C#
C#でJSONファイルを読み書きする方法(JsonSerializer・Newtonsoft.Json)
No.3
Java&Spring記事人気No3
C#
C#のLINQクエリ構文の書き方と基本操作をマスターしよう
No.4
Java&Spring記事人気No4
C#
C#でswitch式を使う方法!C# 8.0以降の新機能を解説
No.5
Java&Spring記事人気No5
COBOL
COBOLの数値データ型「PIC 9」の使い方と注意点をやさしく解説!
No.6
Java&Spring記事人気No6
C#
C#のLINQ(リンク)とは?基本概念とデータ操作を初心者向けに徹底解説!
No.7
Java&Spring記事人気No7
C#
C#のCancellationTokenを使ったキャンセル処理を完全ガイド!非同期処理を安全に止める方法
No.8
Java&Spring記事人気No8
C#
C#の非同期処理とUIスレッドをマスター!WPF/WinFormsでアプリが止まる問題を解決