C#のswitch文の使い方について書いています。
switch文の使い方と、下記についてです。
・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文を使う方法について書いていきました。
記事の内容をまとめると、下記のようになります。
・breakはcaseの条件を抜けることを明示している。
・数値でも分岐することができた。
・defaultを使うことで、caseに該当しなかったときの処理を書けた。

コメント