制御構文

[C#] switch-case文で複数条件を分岐する方法

今回は、C#のswitch-case文で複数条件を分岐する方法についてご紹介します。

switch-case文とは

switch-case文は、指定した変数や式の値に応じて複数の処理を分岐させるための構文です。

if-else文を並べる場合に比べ、複数の分岐が発生するときにコードが整理されやすく、可読性が向上するというメリットがあります。

また、C#では複数のcaseをまとめたり、パターンマッチングを行ったりと、さまざまな方法で柔軟に条件分岐を表現できます。

switch-case文の基本的な構文

switch-case文の基本構造は以下の通りです。

実行結果

値は2です

上記の例では、変数valueが2のため、case 2: のブロックが実行されます。

defaultはどのcaseにも当てはまらなかった場合に実行される分岐です。

複数のcaseをまとめる

同じ処理を行うcaseが複数ある場合は、それらを連続して書くことでまとめることができます。

実行結果

値は1または2です

この例では、valueが1でも2でも同じブロックの処理が実行されます。

gotoを使ったフォールスルー

C#では、複数のcaseを段階的に処理したい場合、goto caseを使用してフォールスルーさせる方法があります。

ただし、コードの可読性を損ないやすいため、多用は避けることが推奨されます。

実行結果

値は2です
case 2 から続けて実行される共通処理です

パターンマッチングを用いた高度な分岐

C# 7.0以降では、switch-case文でのパターンマッチングが可能です。

型や条件に応じてより細やかな分岐を行えるため、複雑な条件でもコードがわかりやすくなる利点があります。

型に応じた分岐

オブジェクトの型をチェックしたい場合は、caseに型を記述するだけで簡単に判定できます。

実行結果

文字列です: Hello

条件付きパターン(when節)の利用

パターンマッチングのcase節にwhenを用いると、同じ型でも特定条件に応じて分岐を細かく設定できます。

実行結果

負の整数です

C# 8.0以降のswitch式

C# 8.0ではswitch文が式として利用できるようになり、複数の条件を簡潔に記述できます。

実行結果

評価: B

C# 9.0以降ではさらに関係パターンや論理パターンも追加され、より柔軟な条件分岐が可能になっています。

注意点

switch-case文を活用する際に意識しておきたいポイントをまとめます。

  • break文の付け忘れ:C#ではcaseの末尾にbreakを入れないとコンパイルエラーになります。意図しないフォールスルーを防ぐ意味でも必須です。
  • 順序と可読性の確保:パターンマッチングを行う場合、上から順に条件が評価されます。より具体的な条件を前方に記述すると意図通りに動作しやすくなります。
  • 複雑化の回避:複雑なロジックをswitch-case文に詰め込みすぎると可読性が低下します。場面によってはif-else文や他の設計パターンとの使い分けを検討してください。

まとめとして、switch-case文は複数条件を分岐する際に非常に便利な構文です。

基本的な使い方はシンプルですが、パターンマッチングなどの機能を使うと表現の幅が広がります。

用途に応じた方法を選択し、常にコードの可読性や保守性に気を配ることが大切です。