Freigeben über


switch (C#-Referenz)

Aktualisiert: September 2010

Die switch-Anweisung ist eine Steuerungsanweisung, die einen auszuführenden Switch-Abschnitt aus einer Liste von Kandidaten auswählt.

Jeder Switch-Abschnitt enthält eine oder mehrere case-Bezeichnungen und eine Liste mit mindestens einer Anweisung. Das folgende Beispiel zeigt eine einfache switch-Anweisung, die über drei switch-Abschnitte verfügt. Jeder Switch-Abschnitt enthält eine case-Bezeichnung, z. B. case 1, und eine Liste mit zwei Anweisungen.

Beispiel

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;
}

Jede case-Bezeichnung gibt einen konstanten Wert an. Die Steuerung wird an den Switch-Abschnitt übergeben, dessen case-Bezeichnung einen konstanten Wert enthält, der dem Wert im switch-Ausdruck, caseSwitch, entspricht. Wenn keine case-Bezeichnung einen übereinstimmenden Wert enthält, wird das Steuerelement an den default-Abschnitt übertragen, falls vorhanden. Wenn kein default-Abschnitt vorhanden ist, wird keine Aktion ausgeführt, und der switch-Anweisung wird die Steuerung entzogen. Im vorherigen Beispiel werden die Anweisungen im ersten Switch-Abschnitt ausgeführt, da die case-Bezeichnung case 1 den Wert 1 angibt und der Wert von caseSwitch ebenfalls 1 ist.

Eine switch-Anweisung kann beliebig viele switch-Abschnitte enthalten, und jeder Abschnitt kann eine oder mehrere case-Bezeichnungen enthalten. Allerdings können zwei case-Bezeichnungen nicht denselben konstanten Wert enthalten.

Die Ausführung der Anweisungsliste im ausgewählten Abschnitt beginnt mit der ersten Anweisung und durchläuft in der Regel die Anweisungsliste, bis eine Sprunganweisung erreicht wird, z. B. break, goto case, return oder throw. An diesem Punkt wird die Steuerelement außerhalb der switch-Anweisung oder eine andere case-Bezeichnung übertragen.

Im Gegensatz zu C++ lässt C# nicht zu, dass die Ausführung von einem Switch-Abschnitt zum nächsten fortgesetzt wird. Im folgenden Code wird ein Fehler verursacht.

switch (caseSwitch)
{
    // The following switch section causes an error.
    case 1:
        Console.WriteLine("Case 1...");
        // Add a break or other jump statement here.
    case 2:
        Console.WriteLine("... and/or Case 2");
        break;
}

Die Anforderung in C# besteht darin, dass das Ende jedes Switch-Abschnitts, einschließlich des letzten, nicht erreichbar ist. Obwohl diese Bedingung normalerweise mithilfe einer Sprunganweisung erfüllt wird, ist der folgende Fall auch zulässig, da das Ende der Anweisungsliste nicht erreicht werden kann.

case 4:
    while (true)
        Console.WriteLine("Endless looping. . . .");

Das folgende Beispiel veranschaulicht die Anforderungen und Funktionen einer switch-Anweisung.

class Program
{
    static void Main(string[] args)
    {
        int switchExpression = 3;
        switch (switchExpression)
        {
            // A switch section can have more than one case label.
            case 0:
            case 1:
                Console.WriteLine("Case 0 or 1");
                // Most switch sections contain a jump statement, such as
                // a break, goto, or return. The end of the statement list
                // must be unreachable.
                break;
            case 2:
                Console.WriteLine("Case 2");
                break;
                // The following line causes a warning.
                Console.WriteLine("Unreachable code");
            // 7 - 4 in the following line evaluates to 3.
            case 7 - 4:
                Console.WriteLine("Case 3");
                break;
            // If the value of switchExpression is not 0, 1, 2, or 3, the
            // default case is executed.
            default:
                Console.WriteLine("Default case (optional)");
                // You cannot "fall through" any switch section, including
                // the last one.
                break;
        }
    }
}

Im abschließenden Beispiel wird die Zeichenfolgeneingabe in die ganzzahlige Variable switchExp konvertiert, die für den switch-Ausdruck verwendet wird. Sie können die Zeichenfolgenvariable str auch direkt verwenden. Dazu müssen Sie die case-Bezeichnungen ändern, um Zeichenfolgenwerte anzugeben, wie im folgenden Code gezeigt.

switch(str)
{
    case "1":
        // ...
    case "2":
        // ...
}
class SwitchTest
{
    static void Main()
    {
        Console.WriteLine("Coffee sizes: 1=Small 2=Medium 3=Large");
        Console.Write("Please enter your selection: ");
        string str = Console.ReadLine();
        int switchExp = int.Parse(str);
        int cost = 0;
        switch (switchExp)
        {
            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.
*/

C#-Programmiersprachenspezifikation

Weitere Informationen finden Sie in der C#-Sprachspezifikation. Die Sprachspezifikation ist die verbindliche Quelle für die Syntax und Verwendung von C#.

Siehe auch

Referenz

C#-Schlüsselwörter

switch Statement (C++)

if-else (C#-Referenz)

Konzepte

C#-Programmierhandbuch

Weitere Ressourcen

C#-Referenz

Änderungsprotokoll

Datum

Versionsgeschichte

Grund

September 2010

"Throw" wurde der Liste von Sprunganweisungen hinzugefügt, die einen Switch-Abschnitt beenden können.

Kundenfeedback.