English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Espressione Switch di C#

Quando si devono testare tre o più condizioni per una variabile, si può utilizzare uno switch statement al posto di if else statement. In questo articolo, imparerai lo switch statement e come utilizzarlo efficacemente in un programma C#.

Ecco la sintassi generale del switch statement.

 Sintassi:

switch(espressione di confronto/variabile)
{
    case valore-costante:
        //I comandi da eseguire;
        break;
    default: 
        //I comandi da eseguire;
        break;
}

Un switch statement inizia con la parola chiave switch, che contiene un'espressione di confronto o una variabile all'interno di parentesi tonde switch(espressione di confronto match expression). Il risultato di questa espressione di confronto o della variabile sarà testato in base alle condizioni case specificate all'interno delle graffe {}. Le condizioni case devono essere specificate con valori costanti unici e finire con due punti:. Ogni caso include una o più istruzioni da eseguire. Se il valore costante è uguale al valore dell'espressione di confronto o della variabile, viene eseguito il caso. Un switch statement può anche includere un etichetta di default opzionale. Se nessun caso viene eseguito, viene eseguito l'etichetta default. Le parole chiave break, return o goto vengono utilizzate per uscire dallo switch statement.

Esempio seguente dimostra un semplice switch statement.

int x = 10;
switch (x)
{ 
    case 5:
        Console.WriteLine("Il valore di x è 5");
        break;
    case 10:
        Console.WriteLine("Il valore di x è 10");
        break;
    case 15:
        Console.WriteLine("Il valore di x è 15");
        break;
    default:
        Console.WriteLine("Valore sconosciuto");
        break;
}
Output:
Il valore di x è 10

Sopra, lo stato switch (x) contiene una variabile x, il cui valore corrisponderà a ogni caso Il valore del valore corrisponde. Il seguente stato switch contiene tre casi di valori costanti 5, 10 e 15. Contiene anche un etichetta di default, se nessun caso di valore corrisponde al valore di switch Corrispondenza variabile/espressione, viene eseguito questo etichetta. Ogni case inizia dopo : e contiene un comando da eseguire. Il valore di X corrisponde al valore del secondo caso, 10: Corrispondenza, quindi il valore di output è il valore di x che è 10.

Lo stato switch può includere qualsiasi espressione non vuota che restituisca un valore di tipo char, string, bool, int o enum.

Lo stato switch può anche includere un'espressione che viene testata per ogni case durante l'esecuzione.

int x = 125;
switch (x % 2)
{ 
    case 0:
        Console.WriteLine($"{x} è un numero pari");
        break;
    case 1:
        Console.WriteLine($"{x} è un numero dispari");
        break;
}
Output:
125 è un numero dispari

Case di switch

I case di switch devono essere valori costanti unici. Possono essere bool, char, string, integer, enum o i tipi corrispondenti nullable.

Attenzione

Dopo il C# 7.0, i case di switch possono includere valori non unici. In questo caso, verrà eseguito il primo case che corrisponde.

Consideriamo un esempio di stato switch semplice.

string statementType = \

{
    case \
        
        break;
    case \
        
        break;
    case \
        Console.WriteLine("stato switch");
        break;
}
Output:
stato switch

È possibile combinare più case per eseguire lo stesso comando.

int x = 5;
switch (x)
{ 
    case 1:
        Console.WriteLine("x = 1");
        break;
    case 2:
        Console.WriteLine("x = 2");
        break;
    case 4:
    case 5:
        Console.WriteLine("x = 4 o x = 5");
        break;
    default:
        Console.WriteLine("x > 5");
        break;
}

Ogni case deve uscire in modo esplicito utilizzando break, return, goto o altro, per assicurarsi che il controllo del programma uscire da un case e non entrare nel case di default.

Di seguito viene utilizzato il chiave di return.

static void Main(string[] args)
{
    int x = 125;
    Console.Write(isOdd(x) ? "Valore pari" : "Valore dispari");
}
static bool isOdd(int i, int j)
{
    switch (x % 2)
    { 
        case 0:
            return true;
        case 1:
            return false;
        default:
            return false;
    }
    
    return false;
}
Output:
Valori dispari

La mancanza di istruzioni break, return o goto, o di case con valori costanti identici, produrrà un errore durante la compilazione.

int x = 1;
switch (x)
{ 
    case 0:
        Console.WriteLine($"{x} è un valore pari");
        break;
    case 1:
        Console.WriteLine($"{x} è un valore dispari");
        break;
    case 1: // Errore - il controllo non può passare da un etichetta case a un'altra case
        Console.WriteLine($"{x} è un valore dispari");
    defaut:
        Console.WriteLine($"{x} è un valore dispari");
        break;
}

Switch annidati

Un'istruzione switch può essere utilizzata all'interno di un'altra istruzione switch.

int j = 5;
switch (j)
{
    case 5:
        Console.WriteLine(5);
        switch (j - 1)
        {
            case 4:
            Console.WriteLine(4);
            switch (j - 2)
            {
                case 3:
                Console.WriteLine(3);
                break;
            }
            break;
        }
        break;
    case 10:
        Console.WriteLine(10);
        break;
    case 15:
        Console.WriteLine(15);
        break;
    default:
        Console.WriteLine(100);
        break;
}
Output:
5 
4 
3
 Punti chiave da ricordare:
  1. L'espressione switch è un metodo sostitutivo per l'espressione if else.

  2. L'espressione/variabile di match dell'espressione switch viene testata rispetto a un insieme di costanti specificate come case.

  3. La switch case deve includere i keyword break, return, o goto per uscire dal caso.

  4. La switch può includere un etichetta default opzionale, che verrà eseguita quando nessun caso viene eseguito.

  5. Il compilatore di C# fornirà un errore riguardante la mancanza di :, valore costante, e uscirà dal caso.

  6. A partire da C#7.0, la condizione switch può includere valori non unici. In questo caso, verrà eseguita la prima situazione corrispondente.