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 ステートメント

参照

概念

C# プログラミング ガイド

参照

C# のキーワード

The switch Statement

if-else (C# リファレンス)

その他の技術情報

C# リファレンス