C#でswitch式を使う方法!C# 8.0以降の新機能を解説
生徒
「C#でたくさんの条件を分けるときに、if文ばかりだと読みにくい気がします。」
先生
「それなら、C# 8.0から使えるswitch式を試してみるといいですよ。」
生徒
「switch文じゃなくて、switch式?何が違うんですか?」
先生
「switch式は、値を返すことができる新しい書き方です。読みやすくて、コードもすっきりしますよ。」
1. switch式とは?
switch式(スイッチしき)は、C# 8.0から導入された新しい文法で、「条件分岐をしながら、その結果となる値を1つ返す」ための書き方です。従来のswitch文は「どの処理を実行するか」を決めるためのものでしたが、switch式は式(expression)として値を返すことができるのが大きな違いです。
少しイメージしやすくすると、「もし1なら『一です』、2なら『二です』、それ以外なら『それ以外です』という文章を用意しておいて、状況に応じてその中から1つを選んで取り出す仕組み」がswitch式です。選ばれた結果は、そのまま変数の代入に使えるため、C#のコードをより短く・簡潔に書けるのが特徴です。
int number = 1;
string text = number switch
{
1 => "一です",
2 => "二です",
_ => "それ以外です"
};
Console.WriteLine(text);
一です
このサンプルでは、numberの値に応じて、textという文字列が自動的に決まります。1なら「一です」、2なら「二です」、それ以外の数字なら「それ以外です」という文字列が選ばれ、最後にConsole.WriteLineで表示されています。
このように、switch式は「条件に応じてどの値を使うか」をすっきり書けるので、C#でたくさんの条件分岐を書くときでも、コードの見通しが良くなります。特に、同じような条件分岐をいくつも書く場面では、switch式を使うことで、読みやすく保守しやすいC#コードにしやすくなります。
2. 従来のswitch文との違い
まずは、従来のswitch文の例を見てみましょう。次のように、条件ごとに処理を分岐します。
int number = 2;
string result;
switch (number)
{
case 1:
result = "One";
break;
case 2:
result = "Two";
break;
default:
result = "Other";
break;
}
Console.WriteLine(result);
Two
これに対して、switch式を使うと以下のようにもっとシンプルに書けます。
int number = 2;
string result = number switch
{
1 => "One",
2 => "Two",
_ => "Other"
};
Console.WriteLine(result);
Two
このように、switch式は値を返すので、resultという変数に直接代入することができます。
3. switch式の基本構文
switch式の基本的な書き方は以下のようになります:
変数名 switch
{
値1 => 結果1,
値2 => 結果2,
_ => デフォルト結果
};
この中で「=>(イコール大なり)」は、パターンマッチングの矢印と呼ばれます。「_」はどのパターンにも当てはまらない場合に使うデフォルト(その他)の指定です。
4. 実用例:曜日に応じたメッセージを表示
次のように、文字列にもswitch式は使えます。
string day = "土曜日";
string message = day switch
{
"月曜日" => "1週間の始まりです。",
"金曜日" => "もうすぐ週末ですね!",
"土曜日" => "お休みを楽しんでください。",
"日曜日" => "ゆっくり休んでください。",
_ => "平日です。頑張りましょう!"
};
Console.WriteLine(message);
お休みを楽しんでください。
このように、条件ごとの結果をそのまま代入できるので、コードが非常に見やすくなります。
5. switch式のメリットと注意点
switch式には以下のようなメリットがあります:
- コードがコンパクトで読みやすい
- 変数への代入がスムーズにできる
- パターンマッチングとの相性が良い
ただし、以下の注意点もあります:
- C# 8.0以降でのみ使用可能(古い環境ではエラーになります)
- すべてのパターンを網羅していないと、エラーになる場合があります(特に値の種類が多いとき)
6. 型に応じたswitch式(型パターン)
switch式は、型による条件分岐にも対応しています。例えば次のように、型ごとに処理を分けることができます。
object input = 123;
string result = input switch
{
int n => $"整数です:{n}",
string s => $"文字列です:{s}",
_ => "未知の型です"
};
Console.WriteLine(result);
整数です:123
このような使い方を「型パターン」と呼び、入力された値の型に応じた処理を記述できます。
7. switch式はどこで使うと便利?
switch式は、以下のような場面でとても便利です。
- 変数の値によって表示内容や処理の種類を変えたいとき
- enum(列挙型)の値に応じて処理を変えるとき
- 複雑なif文をすっきりさせたいとき
特に、if文が多くて見づらくなっているコードを、switch式に置き換えると、コードの見通しがよくなり、バグも減らすことができます。
まとめ
C# 8.0で導入されたswitch式は、従来のswitch文に比べてとてもシンプルで柔軟な書き方ができる便利な機能です。従来のswitch文では、各パターンごとにbreakやcaseを使って処理を分ける必要がありましたが、switch式ならそのまま値を返す形で書けるため、より見やすくコンパクトなコードを書くことができます。
特に、変数の値に応じた文字列や結果を代入したい場合や、型に応じて処理を分岐したい場合にswitch式は非常に有効です。条件が多くてif文が複雑になってしまうようなコードでも、switch式を使えば整理されて見通しが良くなります。
また、switch式は数値だけでなく文字列や型(オブジェクト)にも対応しており、さまざまな場面で活用できます。ただし、C# 8.0以降のバージョンでしか使用できないため、使用環境には注意が必要です。
ここで、switch式の基本的な使い方を復習しておきましょう。
switch式の基本サンプルコード
int score = 85;
string grade = score switch
{
>= 90 => "優秀",
>= 70 => "合格",
>= 50 => "再試験",
_ => "不合格"
};
Console.WriteLine($"判定結果:{grade}");
判定結果:合格
この例では、switch式を使って点数に応じた評価を簡潔に書いています。if文に置き換えると冗長になりがちな処理も、switch式ならすっきり記述できます。
覚えておきたいポイント
- switch式は値を返す新しい構文(C# 8.0以降)
- =>(矢印)は結果を返す演算子
- デフォルト値には
_を使う - 文字列やオブジェクトにも使える
- 型パターンを使うと型ごとの処理分岐ができる
今後、アプリケーションの開発や業務システムの実装で複雑な条件分岐が出てきたときに、switch式を使いこなせると保守性が高く、読みやすいコードを実現できます。新しい構文を恐れず、積極的に取り入れていくことで、プログラミングのスキルが一段と磨かれていきます。
生徒
「先生、switch式って最初は難しそうに見えたけど、書いてみたらすごく分かりやすかったです!」
先生
「その通りです。switch式は、条件ごとの結果をシンプルに書きたいときにぴったりですよ。」
生徒
「if文よりもスッキリしていて、パターンがたくさんあっても読みやすいですね!」
先生
「複雑な条件ほどswitch式の威力が発揮されます。特に型に応じた分岐や、文字列の処理に使うと便利ですよ。」
生徒
「型パターンの書き方も面白かったです。入力された値の種類で処理を変えるときに使えそうですね!」
先生
「そのとおり。今後の開発でswitch式をどんどん活用していけば、コードの質がどんどん良くなっていきますよ。」