10yroの開発日記

株式会社10yro(トイロ)のエンジニアが書いています

C# 8.0 のswitch式について

switch式

C# 8.0から、switch式という機能が追加されました。

従来のswitch構文は、C言語の構文を踏襲したもので、ちょっと使いにくかったのですが、シンプルな式として書けるようになりました。

構文としては、以下のようになります。

変数 switch
{
    パターン1 => 式1, ・・・パターンn => 式n,  
}

例えば、、、

現在の月によって、以下の文字をコンソールに出力するコードを用意します。

  • 1~4月の場合、月を英語(略語)で出力
  • 7~8月の場合、「summer vacation!!!」を出力
  • 上記以外の月の場合、数字で「〇月」を出力

従来のswitch構文の場合

    int month = DateTime.Now.Month;
    string str;

    switch (month)
    {
        case 1:
            str = "Jan.";
            break;
        case 2:
            str = "Feb.";
            break;
        case 3:
            str = "Mar.";
            break;
        case 4:
            str = "Apr.";
            break;
        case 7:
        case 8:
            str = "summer vacation!!!";
            break;
        default:
            str = month + "月";
            break;
    }

    Console.WriteLine(str);

これをC# 8.0のswitch式で書き換えると、以下のようになります。

    int month = DateTime.Now.Month;
    var str = month switch
    {
        1 => "Jan.",
        2 => "Feb.",
        3 => "Mar.",
        4 => "Apr.",
        _ when month == 7 || month == 8 => "summer vacation!!!",
        _ => month + "月"
    };

    Console.WriteLine(str);

caseやbreakなどは不要となり、ダラダラと書かなくて済みます。

また、defaultの処理は、_(アンダースコア)とマッチさせます。

以上、switch式の備忘録でした。