Udostępnij za pośrednictwem


switch (odwołanie w C#)

Instrukcja switch jest instrukcją sterowania, który wybiera przełącz sekcję do wykonania z listy kandydatów.

Instrukcja switch zawiera jedną lub więcej sekcji przełączników.Każda sekcja przełącznika zawiera jedną lub więcej etykiet „case”, po której następuje jedna lub więcej instrukcji.Poniższy przykład ukazuje prostą instrukcję switch, która składa się z trzech części.Każda sekcja przełącznika ma jedną etykietę „case”, taką jak case 1, oraz dwie instrukcje.

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

Uwagi

Każda etykieta przypadku określa wartość stałą.Instrukcja switch przekazuje formant do sekcji przełącznika, której etykieta „case” pasuje do wartości wyrażenia przełączania (w tym przykładzie caseSwitch).Jeśli żadna etykieta wielkości liter nie zawiera pasującej wartości, kontrola jest przekazywana do sekcji default, jeśli taka istnieje.Jeśli ma nie sekcji default, nie są podejmowane żadne czynności i kontrola jest przekazywana poza instrukcję switch.W poprzednim przykładzie wykonywane są instrukcje w pierwszej sekcji przełącznika, ponieważ case 1 odpowiada wartości caseSwitch.

Instrukcja switch może zawierać dowolną liczbę sekcji przełączników, a każda sekcja może mieć jedną lub więcej etykiet „case” (jak pokazano w przykładzie etykiet case ciągów poniżej).Jednak żadne dwie etykiety „case” nie mogą zawierać tej samej wartości stałej.

Wykonanie listy instrukcji w zaznaczonej sekcji przełączników zaczyna się od pierwszej instrukcji i jest kontynuowane przez listę instrukcji, zwykle aż do osiągnięcia instrukcja skoku, takiej jak break, goto case, return lub throw.W tym momencie przekazanie kontroli poza instrukcję switch lub do innej etykiety sprawy.

W przeciwieństwie do języka C++ język C# nie umożliwia, aby wykonywanie kontynuowało z jednej sekcji przełączania do następnej.Poniższy kod powoduje błąd:

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

Język C# wymaga, aby końce sekcji przełączników, w tym ostatnia, były nieosiągalne. Oznacza to, że w przeciwieństwie do innych języków, twój kod nie może przechodzić do następnej sekcji przełącznika. Mimo że wymóg ten jest zazwyczaj spełniony przy użyciu instrukcji break, następujący przypadek również jest prawidłowy, ponieważ zapewnia, że koniec listy instrukcji jest nieosiągalny.

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

Przykład

Poniższy przykład ilustruje wymagania i możliwości instrukcji switch.

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

W ostatnim przykładzie zmienna ciągu str oraz etykiety wielkości liter ciągu sterują przepływem wykonania.

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 cost = 0;

        // Notice the goto statements in cases 2 and 3. The base cost of 25 
        // cents is added to the additional cost for the medium and large sizes. 
        switch (str)
        {
            case "1":
            case "small":
                cost += 25;
                break;
            case "2":
            case "medium":
                cost += 25;
                goto case "1";
            case "3":
            case "large":
                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.
*/

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka jest ostatecznym źródłem informacji o składni i użyciu języka C#.

Zobacz też

Informacje

Słowa kluczowe języka C#

switch — instrukcja (C++)

if-else (odwołanie w C#)

Koncepcje

Przewodnik programowania w języku C#

Inne zasoby

Odwołanie w C#