L’istruzione switch ci consente di modificare il flusso del programma in base ai valori (finiti) che può assumere una variabile.
La sintassi è questa:
switch (variabile) { case valore1: // esegue le istruzioni in base al valore del primo case break; case valore2: // esegue le istruzioni in base al valore del secondo case break; ......... case valore n: // esegue le istruzioni in base al valore del ennesimo case break; default: // esegue le istruzioni se non c’è corrispondenza con alcun case break; }
La scelta del costrutto case da eseguire, non è dettato da una condizione come nell’istruzione if ma da un discriminante rappresentato dal valore che assume la variabile nel costrutto switch .
Qualora venisse rilevata una corrispondenza con il valore esplicito di un cotrutto case, verrà eseguito il codice relativo al suo interno.
Per rendere il concetto più semplice, facciamo ricorso al solito programmino che sicuramente ci farà capire molto più della teoria.
Scriviamo un programma che legge un numero intero da tastiera compreso, ad esempio, tra 1 e 5 e che ci stampi un messaggio.
1 using System;
2 class SwitchNum
3 {
4 public static void Main()
5 {
6 // creo ed inizializzo una variabile di tipo byte
7 int num=0;
8 // visualizzo un messaggio per l'utente
9 Console.Write("Inserisci un numero tra 1 e 5: ");
10 // leggo il numero da tastiera. Notate il casting
11 num=Convert.ToInt32(Console.ReadLine());
12 // Istruzione switch
13 switch (num)
14 {
15 case 1:
16 Console.WriteLine("\nHai digitato il numero 1");
17 break;
18 case 2:
19 Console.WriteLine("\nHai digitato il numero 2");
20 break;
21 case 3:
22 Console.WriteLine("\nHai digitato il numero 3");
23 break;
24 case 4:
25 Console.WriteLine("\nHai digitato il numero 4");
26 break;
27 case 5:
28 Console.WriteLine("\nHai digitato il numero 5");
29 break;
30 default:
31 // messaggio di default
32 Console.WriteLine("\nNon hai digitato un numero compreso
33 tra 1 e 5");
34 break;
35 }
36 }
37 }
Nell’esempio non c’è molto da dire, però l’istruzione che compare alla riga numero 11 è degna di un piccolo commento.
L’istruzione (metodo): Console.ReadLine() ci consente di leggere da tastiera del testo fino a quando non viene incontrato il carattere di fine linea (carriage return o line feed). Ebbene, alla richiesta di inserimento del numero, digiteremo soltanto un carattere (un numero tra 1 e 5) e successivamente, tramite il tasto invio, confermeremo tale richiesta.
Il carattere digitato però dovrà essere convertito (casting) in un tipo int perché dovrà essere memorizzato in una variabile (num) di questo tipo.
L’istruzione (metodo): Convert.ToInt32(..) esegue questa esplicita conversione affinchè la successiva istruzione switch possa manipolare il dato inserito.
Notate che l’istruzione switch è composta da cinque costrutti case più uno di default qualora si sia digitato un numero (carattere) non compreso nell’intervallo richesto.
Un’ultima nota riguarda i tipi di dato che questa istruzione può gestire. Nella seguente tabella, sono riassunti i tipi di dato che si possono gestire:
- sbyte
- byte
- short
- ushort
- int
- uint
- long
- ulong
- char
- stringhe











