こんにちは!
C#で条件分岐を書くとき、switch文が長くなってしまって読みにくいと感じたことはありませんか。C# 8.0から導入された「スイッチ式(switch expression)」を使えば、その悩みをすっきりと解決できます。
switch文って、caseとかbreakとか書くのが面倒だよね。
=>)を使った新しい書き方があるって聞いたけど、どう使うんだろう。
従来のswitch文は強力ですが、記述量が多くなりがちで、コードの可読性を下げてしまうことがありました。そこで登場したのが、より現代的で洗練された記法である「スイッチ式」です。
この記事では、C#のスイッチ式(アロー構文)について、 基本的な書き方から、従来のswitch文との違い、そして便利なパターンマッチングの使い方まで を、初心者の方にも分かりやすく丁寧に解説します。
この記事は次のような方におすすめです。
- C#のコードをもっと簡潔に書きたい方
- 長い
if-else文やswitch文をリファクタリングしたい方 - C# 8.0以降の新しい機能を使いこなしたい方
- 可読性の高いきれいなコードを書きたいエンジニアの方
- パターンマッチングを使った高度な条件分岐に興味がある方
この記事を読めば、スイッチ式のメリットを理解し、実際の開発でスムーズに導入できるようになります。冗長なコードを削減し、一目でロジックが伝わるスマートなプログラミングを目指しましょう。
「コードの行数を減らしてスッキリさせたい方」や「最新のC#の書き方をマスターしたい方」は、ぜひ参考にしてください。
それでは、順を追って詳しく見ていきましょう!
従来のswitch文と新しいスイッチ式の違い
まずは、これまでの書き方と新しい書き方を比較して、どれくらいシンプルになるのかを見てみましょう。
従来のswitch文の書き方
例えば、天気予報の情報を元に、持ち物をアドバイスするメソッドを考えてみます。従来のswitch文では、次のように記述していました。
public string GetAdvice(string weather)
{
string advice;
switch (weather)
{
case "晴れ":
advice = "日傘を持っていきましょう。";
break;
case "雨":
advice = "傘を忘れないでください。";
break;
case "曇り":
advice = "折りたたみ傘があると安心です。";
break;
default:
advice = "天気予報を確認しましょう。";
break;
}
return advice;
}
このコードには、caseやbreakが繰り返し登場し、行数も長くなっています。また、adviceという変数を一度宣言してから代入するという手順も少し冗長です。
新しいスイッチ式(アロー構文)の書き方
これをスイッチ式を使って書き換えると、驚くほどスッキリします。
public string GetAdvice(string weather)
{
return weather switch
{
"晴れ" => "日傘を持っていきましょう。",
"雨" => "傘を忘れないでください。",
"曇り" => "折りたたみ傘があると安心です。",
_ => "天気予報を確認しましょう。"
};
}
いかがでしょうか。caseもbreakも消え、変数への代入もなくなりました。見た目が表のように整列されており、どの条件で何が返されるのかが一目瞭然です。
この新しい構文の主な特徴は以下の通りです。
- 変数
switch{ … } という順序で記述します。 case :の代わりに=>(アロー) を使います。default :の代わりに_(破棄パターン) を使います。- 文(Statement)ではなく 式(Expression) なので、結果を直接リターンしたり変数に代入したりできます。
スイッチ式の基本的な使い方
スイッチ式は、値を返すための条件分岐に特化しています。ここでは、その基本的なルールと使い方を詳しく解説します。
変数への代入
スイッチ式は値を返すため、その結果をそのまま変数に代入することができます。
int number = 1;
string message = number switch
{
1 => "一番です",
2 => "二番です",
_ => "その他です"
};
このように、右辺に直接条件分岐を書けるため、初期化と同時に値を確定させることができます。
複数の条件をまとめる
従来のswitch文では、複数のcaseを並べて処理を共通化することがありました。スイッチ式では、論理演算子などは使えませんが、パターンマッチングの機能を活用することで柔軟な記述が可能です(後述します)。単純な値の一致だけでなく、より高度な条件設定ができるのが強みです。
defaultの代わりの「_(アンダースコア)」
従来のdefaultケースに相当するのが、_(アンダースコア)です。これは「破棄パターン」と呼ばれ、 ここまでの条件のいずれにも当てはまらなかったすべての値 にマッチします。
スイッチ式は式であるため、 必ず何らかの値を返す必要があります。 そのため、全てのパターンを網羅するか、この_を使ってデフォルトの値を指定することが必須となります。もし網羅されていないパターンがあり、実行時にその値が来た場合、例外が発生するので注意が必要です。
パターンマッチングとの組み合わせ
スイッチ式の真価は、C#の強力な「パターンマッチング」と組み合わせたときに発揮されます。単なる値の比較だけでなく、オブジェクトのプロパティや数値の範囲に基づいた分岐が可能です。
プロパティパターン
オブジェクトの中身(プロパティ)を見て分岐させることができます。
public class User
{
public string Name { get; set; }
public int Age { get; set; }
}
public string GetUserType(User user) => user switch
{
{ Age: < 20 } => "未成年",
{ Age: >= 20, Age: < 65 } => "成人",
{ Age: >= 65 } => "高齢者",
_ => "不明"
};
この例では、UserオブジェクトのAgeプロパティの値によって分岐しています。{ Age: < 20 } のような書き方で、オブジェクトの内部状態を直接条件に指定できるのです。
リレーショナルパターン(関係パターン)
数値の比較を行う際に、< や > などの演算子を直接使うことができます。これはC# 9.0から強化された機能です。
int score = 85;
string grade = score switch
{
>= 90 => "S評価",
>= 80 => "A評価",
>= 70 => "B評価",
>= 60 => "C評価",
_ => "不合格"
};
従来のif-else文で書いていたような数値の範囲判定が、スイッチ式の中で非常に直感的に記述できるようになりました。
論理パターン
and、or、not といった論理演算子を使って、条件を組み合わせることも可能です。
int temperature = 25;
string feeling = temperature switch
{
< 10 => "寒い",
>= 10 and < 25 => "快適",
>= 25 => "暑い"
};
これにより、複雑な条件分岐も一行でスッキリと表現できます。
スイッチ式を使うメリット
最後に、スイッチ式を導入することで得られるメリットを整理しておきましょう。
コードが劇的に短くなる
冒頭の比較でも見た通り、不要なキーワード(case, break, returnなど)を省略できるため、コードの行数を大幅に削減できます。これにより、画面内に収まる情報量が増え、全体の見通しが良くなります。
ロジックが明確になる
「条件」と「結果」が対になって並ぶため、宣言的な記述になります。これは、「どうやって処理するか」ではなく「何がどうなるか」に注目させる書き方であり、読み手にとってロジックの意図が伝わりやすくなります。
代入漏れを防げる
スイッチ式は値を返すため、変数への代入忘れを防ぐことができます。従来のswitch文では、特定の分岐で変数を設定し忘れるミスが起こり得ましたが、スイッチ式では必ず値を返す必要があるため、コンパイラがチェックしてくれます。
ひとつひとつ真摯に向き合う企業
株式会社 ONE WEDGEでは、新たな仲間を募集しています!
私たちと一緒に、革新的で充実したキャリアを築きませんか?
当社は、従業員が仕事と私生活のバランスを大切にできるよう、充実した福利厚生を整えています。
- 完全週休2日制(土日休み)で、祝日や夏季休暇、年末年始休暇もしっかり保証!
- 様々な休暇制度(有給、慶弔、産前・産後、育児、バースデー休暇、有給6日取得で特別休暇付与)を完備!
- 従業員の成長と健康を支援するための表彰制度、資格取得支援、健康促進手当など!
- 生活を支えるテレワーク手当、記事寄稿手当、結婚祝金・出産祝金など、様々な手当を提供!
- 自己啓発としての書籍購入制度や、メンバー間のコミュニケーションを深める交流費補助!
- 成果に応じた決算賞与や、リファラル採用手当、AI手当など、頑張りをしっかり評価!
- ワークライフバランスを重視し、副業もOK!
株式会社 ONE WEDGEでは、一人ひとりの従業員が自己実現できる環境を大切にしています。
共に成長し、刺激を与え合える仲間をお待ちしております。
あなたの能力と熱意を、ぜひ当社で発揮してください。
ご応募お待ちしております!
ホームページ、採用情報は下記ボタンからご確認ください!
応募、ご質問など、お問い合わせフォーム、またはX (旧Twitter)、InstagramのDMでお気軽にご相談ください♪
まとめ
今回は、C#のスイッチ式(アロー構文)について解説しました。
- 従来の
switch文よりも簡潔で、可読性が高い書き方です。 変数 switch { パターン => 値, ... }という構文を使います。defaultの代わりに_(アンダースコア)を使用します。- プロパティパターンやリレーショナルパターンと組み合わせることで、強力な表現力を発揮します。
- コードの行数を減らし、ロジックを明確にするメリットがあります。
C#は進化を続けており、より書きやすく、より安全な言語になっています。スイッチ式はその代表的な機能の一つです。ぜひ、日々のコーディングに取り入れて、モダンで美しいC#コードを書いてみてください。
※本記事の本文案はAIを活用して作成していますが、記載しているコードは筆者が実際に実行・検証し、内容の正確性を確認したうえで公開しています。


