switch (Riferimenti per C#)

L'istruzione switch è un'istruzione di controllo che gestisce più selezioni ed enumerazioni trasferendo il controllo a una delle istruzioni case presenti all'interno del corpo, come illustrato nell'esempio riportato di seguito:

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

Il controllo viene trasferito all'istruzione case che corrisponde al valore dello switch. L'istruzione switch può comprendere un numero qualsiasi di istanze case. Tuttavia, due istruzioni case non possono avere lo stesso valore. L'esecuzione del corpo dell'istruzione inizia con l'istruzione selezionata e continua finché l'istruzione break non trasferisce il controllo all'esterno del corpo di case. È necessario inserire un'istruzione di spostamento come break dopo ogni blocco case, compreso l'ultimo, anche nel caso di un'istruzione case o default. Tranne che per un'eccezione, (a differenza dell'istruzione switch di C++), C# non supporta un passaggio implicito da un'etichetta case a un'altra. L'unica eccezione si verifica se un'istruzione case non dispone di alcun codice.

Se nessuna espressione case corrisponde al valore dello switch, il controllo viene trasferito all'istruzione o alle istruzioni che seguono l'etichetta default facoltativa. Se non è presente alcuna etichetta default, il controllo viene trasferito all'esterno di switch.

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

Input

2

Esempio di output

Coffee sizes: 1=Small 2=Medium 3=Large
Please enter your selection: 2
Please insert 50 cents.
Thank you for your business.

Nell'esempio riportato di seguito viene illustrato che il passaggio da un'etichetta case a un'altra è consentito per le etichette case vuote.

// statements_switch2.cs
using System;
class SwitchTest 
{
    static void Main()
    {
        int n = 2;
        switch(n) 
        {
            case 1:
            case 2: 
            case 3: 
                Console.WriteLine("It's 1, 2, or 3.");
                break; 
        default: 
            Console.WriteLine("Not sure what it is.");
            break; 
        }
    }
}

Output

It's 1, 2, or 3.

  • Nell'esempio precedente è stata utilizzata la variabile di tipo integrale n per le istanze case dell'istruzione switch. In alternativa, è anche possibile utilizzare direttamente la variabile stringa s. In questo caso, è possibile utilizzare le istanze case dell'istruzione switch come illustrato di seguito.


        switch(s)
{
    case "1":
        // ...
    case "2":
        // ...
}

Per ulteriori informazioni, vedere le sezioni riportate di seguito in Specifiche del linguaggio C#:

  • 5.3.3.6 Istruzione switch

  • 8.7.2 Istruzione switch

Mostra: