【C#】switch式を使って条件分岐を簡潔に記述する

C# 8.0 で導入された「switch式(Switch Expressions)」を使用すると、従来の switch 文よりも簡潔で直感的な記述が可能になります。

従来の switch 文は「制御構造(ステートメント)」でしたが、switch式は「式(Expression)」であるため、結果を直接変数に代入したり、メソッドの戻り値として返すことができます。これにより、コードの行数を大幅に削減し、可読性を向上させることができます。

本記事では、System.IO.DriveType 列挙型を用いてドライブの種類を判定するコードを例に、switch式の基本的な構文と使い方を解説します。

目次

実装例:ドライブ種類の判定

以下は、指定されたドライブの種類(列挙型)に応じて、対応する日本語名称を文字列として取得するプログラムです。

using System;
using System.IO;

namespace SwitchExpressionExample
{
    class Program
    {
        static void Main(string[] args)
        {
            // 判定対象のドライブタイプ(例: ネットワークドライブ)
            DriveType currentDrive = DriveType.Network;

            // switch式を利用した判定ロジック
            // 結果を直接変数 'driveInfo' に代入できる
            string driveInfo = currentDrive switch
            {
                DriveType.Fixed => "固定ディスク (HDD/SSD)",
                DriveType.Network => "ネットワークドライブ",
                DriveType.Removable => "リムーバブルディスク (USBメモリ等)",
                DriveType.CDRom => "光ディスクドライブ",
                DriveType.Ram => "RAMディスク",
                // アンダースコア (_) は default ケースに相当する「破棄パターン」
                _ => "その他のドライブ"
            };

            Console.WriteLine($"判定結果: {driveInfo}");
            
            // 参考: メソッドの戻り値として直接記述する場合の例
            Console.WriteLine(GetStatusMessage(200));
        }

        // switch式はメソッドの戻り値としても非常に使いやすい
        static string GetStatusMessage(int statusCode) => statusCode switch
        {
            200 => "成功",
            404 => "見つかりません",
            500 => "サーバーエラー",
            _ => "不明なステータス"
        };
    }
}

解説とポイント

1. 基本構文の変化

従来の case :break; といったキーワードが不要になり、代わりにアロー演算子 => を使用します。

  • 従来: case DriveType.Fixed: result = "固定"; break;
  • switch式: DriveType.Fixed => "固定",

各アーム(分岐)はカンマ , で区切ります。

2. defaultケース(破棄パターン)

従来の default: ラベルの代わりに、アンダースコア _ を使用します。これは「破棄パターン(Discard Pattern)」と呼ばれ、どの条件にも一致しなかった場合の処理を記述します。 switch式は値を返す必要があるため、すべてのパターンを網羅するか、この破棄パターンを用意する必要があります。

3. 式としての利用

コード例の GetStatusMessage メソッドのように、switch式は評価結果として値を返すため、メソッド定義の =>(式形式のメンバー定義)と組み合わせることで、非常にコンパクトなメソッドを作成できます。

まとめ

switch式を利用することで、条件分岐のロジックを宣言的かつシンプルに記述できます。

  • 構文: 変数 switch { パターン => 値, _ => デフォルト値 };
  • メリット: 行数の削減、break 漏れの防止、変数への直接代入が可能。

C# 8.0 以降の環境であれば、単純な値の変換やマッピング処理において、従来の switch 文よりも積極的に switch式を使用することを推奨します。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次