switch (Riferimenti per C#)

L'istruzione switch è un'istruzione di controllo che seleziona una sezione switch da eseguire da un elenco di candidati.

Ogni sezione switch contiene una o più etichette case e un elenco di uno o più istruzioni.Nell'esempio seguente viene illustrata una semplice istruzione switch con tre sezioni switch.Ogni sezione switch ha una etichetta case, ad esempio case 1 e un elenco di due istruzioni.

Esempio

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

Ogni etichetta case specifica un valore costante.Il controllo viene trasferito nella sezione switch la cui etichetta case contiene un valore costante che corrisponde al valore dell'espressione switch, caseSwitch.Se nessuna etichetta case contiene un valore corrispondente, il controllo viene trasferito alla sezione default, se esistente.Se non è presente alcuna sezione default non avviene alcuna azione e il controllo viene trasferito al di fuori dell'istruzione switch.Nell'esempio precedente, le istruzioni nella prima sezione switch vengono eseguite perché l'etichetta case case 1 specifica il valore 1 e che il valore di caseSwitch è anche 1.

Un'istruzione switch può includere qualsiasi numero di sezioni switch e ogni sezione può disporre di uno o più etichette case.Tuttavia, non è possibile che due etichette case contengano lo stesso valore costante.

L'esecuzione dell'elenco di istruzioni nella sezione selezionata inizia con la prima istruzione e continua nell'elenco di istruzioni, in genere fino a raggiungere un istruzione di salto, ad esempio break, goto case, return o throw.A quel punto, il controllo viene trasferito al di fuori dell'istruzione switch o in un'altra etichetta case.

A differenza di C++, C# non consente di continuare l'esecuzione da una sezione dell'opzione a quella successiva.Il codice seguente causa un errore.

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

Il requisito in C# è che la fine di ogni sezione switch, inclusa quella finale, non è raggiungibile.Sebbene questo requisito in genere venga soddisfatto utilizzando un'istruzione di spostamento, è valido anche il seguente caso poiché non è possibile raggiungere la fine dell'elenco.

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

Nell'esempio seguente vengono illustrati i requisiti e le caratteristiche di un'istruzione 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;
        }
    }
}

Nell'esempio finale, l'input della stringa viene convertito in una variabile Integer, switchExp, che viene utilizzata per l'espressione switch.È anche possibile utilizzare direttamente la variabile stringa str.A tale scopo, è opportuno modificare le etichette case per specificare i valori di stringa, come indicato nel codice seguente.

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

Specifiche del linguaggio C#

Per ulteriori informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio è la fonte ufficiale per la sintassi e l'utilizzo di C#.

Vedere anche

Riferimenti

Parole chiave di C#

istruzione switch (C++)

if-else (Riferimenti per C#)

Concetti

Guida per programmatori C#

Altre risorse

Riferimenti per C#