Udostępnij za pośrednictwem


Przełącznik (C# odniesienia)

switch Instrukcja jest instrukcja formantu, który wybiera Przełączanie sekcji danych z listy kandydatów.

Każda sekcja przełącznika zawiera jeden lub więcej sprawa etykiety oraz wykaz jedną lub więcej instrukcji.W poniższym przykładzie przedstawiono prosty switch instrukcji, która składa się z trzech części przełącznika.Każda sekcja przełącznik ma jedną etykietę sprawy, takie jak case 1, a także wykaz dwie instrukcje.

Przykład

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

Każda sprawa etykieta Określa wartość stałą.Formant zostaje przeniesiony do sekcji przełącznik, którego sprawa etykieta zawiera stałą wartość, która odpowiada wartości Przełączanie wyrażenie, caseSwitch.Jeśli brak etykiety case zawiera pasującą wartość, formant zostanie przeniesiony do default działu, jeśli został wprowadzony.Jeśli ma nie default sekcji, nie są podejmowane nie czynności i sterowanie przekazywane jest poza switch instrukcji.W poprzednim przykładzie wykonywane są sprawozdania, w pierwszej części przełącznika, ponieważ etykieta case case 1 określa wartość 1, a wartość caseSwitch również wynosi 1.

A switch instrukcja może zawierać dowolną liczbę sekcji przełącznika, a każda sekcja może mieć jedną lub więcej etykiet sprawy.Nie dwie etykiety sprawa może jednak zawierać tę samą wartość stałą.

Wykonanie listy instrukcji w zaznaczonej sekcji zaczyna się od pierwszej instrukcji i jest przeprowadzane za pośrednictwem listy instrukcji zazwyczaj aż do osiągnięcia instrukcja skoku, takich jak break, goto case, return, lub throw.W tym momencie przekazanie kontroli poza switch instrukcji lub do innego przypadku etykieta.

W przeciwieństwie do języka C++ C# nie pozwolić na kontynuowanie wykonywania z jednej sekcji przełącznik do następnego.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;
}

Wymóg w języku C# jest, że pod koniec każdej sekcji przełącznika, w tym ostatnią, jest nieosiągalny.Chociaż zazwyczaj jasności za pomocą instrukcji skoku, następujący przypadek również są prawidłowe, ponieważ nie może być osiągnięty koniec listy instrukcji.

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

Poniższy przykład ilustruje wymogami i możliwościami switch instrukcji.

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 przykładzie ostatecznego, ciąg na wejściu jest konwertowany do zmiennej całkowitą switchExp, wykorzystywany do wyrażenia switch.Można również użyć zmiennej ciągu str, bezpośrednio.W tym celu zmieniłoby sprawa etykiety, aby określić wartości ciągów, jak to pokazano w poniższym kodzie.

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;

        // 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 (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.
*/

Specyfikacja języka C#

Aby uzyskać więcej informacji, zobacz Specyfikacja języka C#. Specyfikacja języka to najlepsze źródło informacji dotyczących składni i zastosowania języka C#.

Zobacz też

Informacje

Słowa kluczowe języka C#

Przełącznik instrukcji (C++)

if else (C# odniesienia)

Koncepcje

Podręcznik programowania C#

Inne zasoby

C# odniesienia