Sdílet prostřednictvím


switch – příkaz (referenční dokumentace jazyka C#)

Příkaz switch je řídicí příkaz, který vybere oddíl přepínání ke spuštění ze seznamu kandidátů.

Příkaz switch obsahuje jeden nebo více oddílů přepínače.Každý oddíl přepínače obsahuje jednu nebo více popisek případu následované jedním nebo více příkazy.Následující příklad ukazuje jednoduchý příkaz switch, který obsahuje tři části přepínače.Každý oddíl přepínače má jeden popisek příkazu, například case 1, a dva příkazy.

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

Poznámky

Každý popisek případu určuje hodnotu konstanty.Příkaz přepínače přenese ovládací prvek na část přepínače, jehož popisek případu obsahuje konstantní hodnotu, která odpovídá hodnotě výrazu přepínače (caseSwitch v příkladu).Pokud žádné popisky případů neobsahují odpovídající hodnotu, ovládací prvek bude převeden do oddílu default, pokud existuje.Pokud není žádná část default, není provedena žádná akce a ovládací prvek bude převeden mimo příkaz switch.V předchozím příkladu jsou spouštěny příkazy v první části přepínače, protože popisek případu case 1 se shoduje s hodnotou caseSwitch.

Příkaz switch může obsahovat libovolný počet oddílů přepínače a každý oddíl může obsahovat jeden nebo více štítků případu (jak je zobrazeno v popiscích případu řetězce znázorněných níže).Žádné dva popisky případů však nesmí obsahovat stejnou hodnotu konstanty.

Spuštění seznamu příkazů ve vybraném oddíle přepínače začíná prvním příkazem a pokračuje přes seznam příkazů, obvykle dokud není dosaženo výpisu odkazů, jako je break, goto case, return nebo throw.V tomto okamžiku je ovládací prvek převeden mimo příkaz switch nebo jiný popisek případu.

Na rozdíl od C++ neumožňuje C# pokračovat z jednoho oddílu přepnutí do dalšího.Tento kód způsobí chybu.

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

C# vyžaduje nedostupnost konce oddílů přepínače, včetně finálního. To znamená, že na rozdíl od jiných jazyků váš kód nesmí pokračovat do další části přepínače. I když je tento požadavek obvykle splněn pomocí příkazu break, následující případ také platí, protože zajistí, že nelze dosáhnout konce seznamu příkazů.

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

Příklad

Následující příklad ukazuje požadavky a schopnosti prohlášení 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;
        }
    }
}

V posledním příkladu proměnná řetězce str a popisky případu řetězce řídí tok spouštění.

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

Specifikace jazyka C#

Další informace najdete v tématu Specifikace jazyka C#. Specifikace jazyka je úplným a rozhodujícím zdrojem pro syntaxi a použití jazyka C#.

Viz také

Referenční dokumentace

Klíčová slova jazyka C#

switch – příkaz (C++)

if-else (Referenční dokumentace jazyka C#)

Koncepty

Průvodce programováním v C#

Další zdroje

Referenční dokumentace jazyka C#