C#のswitch文の使い方!caseで条件分岐する!

C# C#

C#のswitch文の使い方について書いています。
switch文の使い方と、下記についてです。

・breakについて
・defaultについて
・goto caseで複数条件を実行する

記事内のサンプルコードについては、.Netのバージョン6(C#のバージョン10)で確認しました。

switch文とは?

switch文は指定した値を比較して、処理を分岐させるための構文になります。
例えば、下記のように使うことができます。

string fruit = "apple";

switch(fruit) {
    case "banana":
        Console.WriteLine($"fruit変数はbananaです");
        break;
    case "grape":
        Console.WriteLine($"fruit変数はgrapeです");
        break;
    case "apple":
        Console.WriteLine($"fruit変数はappleです");
        break;
}

最初にfruit変数に対して、文字列「apple」を代入しています。

次の処理でswitch文を使っています。
丸括弧内「()」に書いているのは、caseで比較したい値です。

今回はfruit変数を渡しているので、fruit変数の文字列と比較します。
波括弧内({})のそれぞれのcaseの文字列と比較されます。
同じ値の場合は、その配下の処理を実行してくれます。

今回はfruit変数は「apple」なので、「case "apple"」と同じになります。
そのため、その配下の処理が実行され、処理が終わります。

プログラムを実行すると、下記のように出力されて、処理が終わりました。

fruit変数はappleです

caseと同じ値で分岐できたことが確認できました。

breakとは何か?

breakは処理の分岐を、終わらせてswitchを抜けることを明示的に書いています。
C#ではbreakを書かないとエラーになってしまいます。

例えば、下記のようにbreakを省略します。
“banana”の箇所のbreakを省略しています。

string fruit = "banana";

switch(fruit) {
    case "banana":
        Console.WriteLine($"fruit変数はbananaです");
    case "grape":
        Console.WriteLine($"fruit変数はgrapeです");
        break;
    case "apple":
        Console.WriteLine($"fruit変数はappleです");
        break;
}

そうすると、下記のようにCS0163エラーが発生しました。

error CS0163: Control cannot fall through from one case label ('case "banana":')

他の言語のときには、breakを書かない場合には次のケースの配下を実行するフォールスルーという動作をすることがあります。
C#のときには、このようにエラーになります。

数値で分岐する

上記では文字列で分岐しましたが、数値で分岐することも、もちろんできます。
例えば、このように数値で分岐します。

int number = 2;

switch(number) {
    case 1:
        Console.WriteLine($"number変数は1です");
        break;
    case 2:
        Console.WriteLine($"number変数は2です");
        break;
    case 3:
        Console.WriteLine($"number変数は3です");
        break;
}

最初にnumber変数に数値の「2」を代入しています。

次の処理でswitch文を使って、number変数の値を比較しています。
今回は「2」なので、「case 2:」の配下が実行されます。

プログラムを実行すると、下記のように出力されました。

number変数は2です

このように数値でも分岐することができます。

デフォルトの動作を書く

caseと同じ階層にdefaultを書くことで、switchのcaseの値に合わないときのデフォルト動作を書くことができます。
例えば、下記のようにデフォルトの動作を定義できます。

int number = 100;

switch(number) {
    case 1:
        Console.WriteLine("number変数は1です");
        break;
    case 2:
        Console.WriteLine("number変数は2です");
        break;
    case 3:
        Console.WriteLine("number変数は3です");
        break;
    default:
        Console.WriteLine("なにかの数値です");
        break;
}

最初にnumber変数に数値の「100」を代入しています。

次の処理でswitch文を使っています。
今回は数値の「100」なので、どのcaseにも該当しません。

そのため「default:」配下の処理が実行されます。
プログラムを実行すると、下記のように出力され、default配下が実行されたことが確認できました。

なにかの数値です

caseで複数条件を実行するには?

C#のcaseで複数条件を実行するには、goto caseを使うことができます。
goto caseを使うことで、フォークスルーのように処理を行うことも可能です。

int number = 2;

switch(number) {
    case 1:
        Console.WriteLine("number変数は1です");
        break;
    case 2:
        Console.WriteLine("number変数は2です");
        goto case 3;
    case 3:
        Console.WriteLine("number変数は3です");
        goto case 5;
    case 4:
        Console.WriteLine("number変数は4です");
        break;
    case 5:
        Console.WriteLine("number変数は5です");
        break;
    default:
        Console.WriteLine("なにかの数値です");
        break;
}

最初にnumber変数に数値の「2」を代入しています。

次の処理でswitch文を使っています。
まず「case 2:」配下の処理が実行されます。
この処理では、breakをせずに「goto case 3」と書いているので、「case 3:」 に処理が移行します。

その次に「case 3:」の処理の最後で、「goto case 5」と書いているので、「case 5:」 に処理が移行します。
そして、「case 5:」でbreakしてswitch文を抜けます。
このようにgoto caseを使うことで、指定した値のcaseの処理に移行することができます。

プログラムを実行すると、下記のように出力されました。

number変数は2です
number変数は3です
number変数は5です

複数の条件に移行して、処理が実行されることが確認できました。

switch文の使い方についてのまとめ

今回はC#でswitch文を使う方法について書いていきました。
記事の内容をまとめると、下記のようになります。

・switch文を使うことで、指定した値を比較して条件分岐できる。
・breakはcaseの条件を抜けることを明示している。
・数値でも分岐することができた。
・defaultを使うことで、caseに該当しなかったときの処理を書けた。

コメント

タイトルとURLをコピーしました