switch (C# リファレンス)
更新 : 2007 年 11 月
switch ステートメントは、次の例に示すように、ステートメントの本体にある case ステートメントの 1 つに制御と列挙体を渡すことで複数選択を処理する制御ステートメントです。
使用例
int caseSwitch = 1;
switch (caseSwitch)
{
case 1:
Console.WriteLine("Case 1");
break;
case 2:
Console.WriteLine("Case 2");
break;
default:
Console.WriteLine("Default case");
break;
}
制御は、switch の値と一致する case ステートメントに移ります。switch ステートメントには、case インスタンスを任意の数だけ指定できますが、2 つの case ステートメントに同じ値を指定することはできません。ステートメント本体の実行は指定されたステートメントから始まり、break ステートメントによって制御が case 本体の外部に移動するまで実行されます。break などのジャンプ ステートメントは、case ステートメントまたは default ステートメントのいずれであっても、各 case ブロックの後ろに記述する必要があります。1 つの例外を除き (C++ の switch ステートメントとは異なり)、C# では、ある case ラベルからその下の case ラベルへの暗黙的な落下 (フォール スルー) をサポートしていません。この例外とは、case ステートメントにコードがない場合をいいます。
case 式が switch 値と一致しない場合、制御はオプションの default ラベルの後ろにあるステートメントに移動します。default ラベルがない場合、制御は switch の外部に移動します。
class SwitchTest
{
static void Main()
{
Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
Console.Write("Please enter your selection: ");
string s = Console.ReadLine();
int n = int.Parse(s);
int cost = 0;
switch(n)
{
case 1:
cost += 25;
break;
case 2:
cost += 25;
goto case 1;
case 3:
cost += 50;
goto case 1;
default:
Console.WriteLine("Invalid selection. Please select 1, 2, or 3.");
break;
}
if (cost != 0)
{
Console.WriteLine("Please insert {0} cents.", cost);
}
Console.WriteLine("Thank you for your business.");
}
}
/*
Sample Input: 2
Sample Output:
Coffee sizes: 1=Small 2=Medium 3=Large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.
*/
- 前述の例では、整数型の変数 n が switch-case に使用されています。文字列変数 s を直接使用することもできます。その場合は、switch-case を次のように使用します。
switch(s)
{
case "1":
// ...
case "2":
// ...
}
次のサンプルでは、空の case ラベルについて、ある case ラベルからその下の case ラベルへの落下 (フォール スルー) を許可する例を示します。
class SwitchTest2
{
static void Main()
{
int n = 2;
switch(n)
{
case 1:
case 2:
case 3:
Console.WriteLine("It's 1, 2, or 3.");
break;
default:
Console.WriteLine("Not sure what it is.");
break;
}
}
}
// Output: It's 1, 2, or 3.
C# 言語仕様
詳細については、「C# 言語仕様」の次のセクションを参照してください。
5.3.3.6 switch ステートメント
8.7.2 switch ステートメント