switch (Riferimenti per C#)
L'istruzione switch è un'istruzione di controllo che seleziona una sezione opzioni da eseguire da un elenco di candidati.
Un'istruzione switch include una o più sezioni opzioni. Ogni sezione opzioni contiene una o più etichette case seguite da una o più istruzioni. Nell'esempio seguente viene illustrata una semplice istruzione switch con tre sezioni opzioni. Ogni sezione opzione ha un'etichetta case, ad esempio case 1, e due istruzioni.
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;
}
Note
Ogni etichetta case specifica un valore costante. L'istruzione switch trasferisce il controllo alla sezione opzioni la cui etichetta case corrisponde al valore dell'espressione switch (caseSwitch nell'esempio). Se nessuna etichetta case contiene un valore corrispondente, il controllo viene trasferito alla sezione default, se esistente. Se non è presente alcuna sezione default, non viene eseguita alcuna azione e il controllo viene trasferito al di fuori dell'istruzione switch. Nell'esempio precedente le istruzioni nella prima parte della sezione opzioni vengono eseguite perché case 1 corrisponde al valore di caseSwitch.
Un'istruzione switch può contenere qualsiasi numero di sezioni opzioni e ogni sezione può avere una o più etichette case come illustrato nell'esempio di etichette case della stringa di seguito. Tuttavia, due etichette case non possono contenere lo stesso valore di costante.
L'esecuzione dell'elenco di istruzioni nella sezione opzioni selezionata inizia con la prima istruzione e continua nell'elenco di istruzioni, in genere fino a raggiungere un istruzione jump, 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 opzioni 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;
}
C# richiede che la fine delle sezioni opzioni, inclusa quella finale, non sia raggiungibile. Ciò significa che, a differenza di altri linguaggi, il codice non può passare nella successiva sezione opzioni. Sebbene questo requisito venga in genere soddisfatto utilizzando un'istruzione break, è valido anche il caso seguente poiché garantisce che la fine dell'elenco di istruzioni non venga raggiunta.
case 4:
while (true)
Console.WriteLine("Endless looping. . . .");
Esempio
Nell'esempio seguente vengono illustrati i requisiti e le funzionalità 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 la variabile di stringa, str, e le etichette case della stringa controllano il flusso di esecuzione.
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.
*/
Specifiche del linguaggio C#
Per altre informazioni, vedere la Specifiche del linguaggio C#. La specifica del linguaggio costituisce il riferimento ufficiale principale per la sintassi e l'uso di C#.