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に該当しなかったときの処理を書けた。
コメント