Esercizio - Implementare un'istruzione switch
- 11 minuti
Un'istruzione switch è un'istruzione di selezione C# che fornisce un'alternativa a un if-elseif-else costrutto di diramazione. L'istruzione switch offre vantaggi rispetto a un costrutto if-elseif-else durante la valutazione di un singolo valore rispetto a un elenco di valori corrispondenti noti.
Si consideri lo scenario seguente:
- Si sta lavorando a un'applicazione relativa alla nutrizione alimentare. Una sezione del codice riguarda i frutti.
- Il codice include una variabile denominata
fruitusata per contenere il nome di tipi diversi di frutta. - È disponibile un elenco dei 20 frutti su cui si concentra l'applicazione.
- Si vuole diramare il codice in base al valore assegnato a
fruit.
In questo scenario è possibile usare un'istruzione switch per creare un ramo separato per ogni tipo di frutta.
Come funziona un'istruzione switch?
L'istruzione switch sceglie una sezione di codice da eseguire da un elenco di possibili sezioni switch. La sezione switch selezionata viene scelta in base a una corrispondenza di criteri con l'espressione di corrispondenza dell'istruzione.
Si consideri l'esempio di codice seguente che mostra la struttura di base dell'istruzione switch :
switch (fruit)
{
case "apple":
Console.WriteLine($"App will display information for apple.");
break;
case "banana":
Console.WriteLine($"App will display information for banana.");
break;
case "cherry":
Console.WriteLine($"App will display information for cherry.");
break;
}
L'espressione di corrispondenza (che può essere definita anche espressione switch) è il valore che segue la parola chiave switch, in questo caso (fruit). Ogni sezione switch è definita da un modello del caso. I modelli di casi vengono costruiti usando la parola chiave case seguita da un valore. Il primo modello case in questo esempio è: case "apple":. I pattern case sono espressioni booleane che restituiscono true o false. Ogni sezione switch include un numero ridotto di righe di codice che verranno eseguite se il modello del caso una corrispondenza per l'espressione di corrispondenza. In questo esempio, se a fruit viene assegnato un valore "apple", il primo modello del caso lo valuterà come true e tale sezione switch verrà eseguita.
Un'istruzione switch deve includere almeno una sezione switch, ma in genere conterrà tre o più sezioni switch.
L'opzione viene usata meglio quando:
- Si dispone di un singolo valore (variabile o espressione) che si desidera associare a molti valori possibili.
- Data una partita, è necessario eseguire al massimo un paio di righe di codice.
Annotazioni
Questo primo esempio di un'istruzione switch è intenzionalmente semplice e l'esame della sintassi è stato breve. Verranno esaminate funzionalità aggiuntive dell'istruzione switch quando si esaminano alcuni scenari più avanzati nelle sezioni seguenti.
È il momento di preparare l'ambiente di codifica e iniziare a sviluppare istruzioni switch personalizzate.
Preparare l'ambiente di scrittura del codice
Questo modulo include attività pratiche che illustrano il processo di compilazione ed esecuzione del codice dimostrativo. È consigliabile completare queste attività usando Visual Studio Code come ambiente di sviluppo. L'uso di Visual Studio Code per queste attività consente di acquisire familiarità nella scrittura e nell'esecuzione del codice in un ambiente di sviluppo usato da professionisti di tutto il mondo.
Apri Visual Studio Code.
Per aprire Visual Studio Code, è possibile usare il menu Start di Windows (o una risorsa equivalente per un altro sistema operativo).
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella passare alla cartella Desktop di Windows.
Se hai una cartella diversa dove conservi i progetti di codice, puoi usare quella cartella. Per questo allenamento, è importante che il luogo sia facile da trovare e da ricordare.
Nella finestra di dialogo Apri cartella, selezionare Seleziona cartella.
Se viene visualizzata una finestra di dialogo di sicurezza che chiede se si considerano attendibili gli autori, selezionare Sì.
Nel menu Terminale di Visual Studio Code, selezionare Nuovo terminale.
Si noti che un prompt dei comandi nel pannello Terminale visualizza il percorso della cartella corrente. Per esempio:
C:\Users\someuser\Desktop>Annotazioni
Se si usa il proprio PC anziché un ambiente sandbox o ospitato e sono stati completati altri moduli di Microsoft Learn in questa serie C#, potrebbe essere già stata creata una cartella di progetto per gli esempi di codice. In tal caso, è possibile ignorare il passaggio successivo, usato per creare un'app console nella cartella TestProject.
Al prompt dei comandi del terminale, per creare una nuova applicazione console in una cartella specificata, immettere il prompt seguente:
dotnet new console -o ./CsharpProjects/TestProjectQuesto comando dell'interfaccia della riga di comando .NET usa un modello di programma .NET per creare un nuovo progetto di applicazione console C# nel percorso della cartella specificato. Il comando crea le cartelle CsharpProjects e TestProject e usa TestProject come nome del file
.csproj.Se viene visualizzato un messaggio che indica che i file esistono già, continuare con i passaggi successivi. I file di progetto esistenti verranno riutilizzati.
Nella visualizzazione EXPLORER espandere la cartella CsharpProjects .
Verranno visualizzati la cartella TestProject e due file, un file di programma C# denominato Program.cs e un file di progetto C# denominato TestProject.csproj.
In Visual Studio Code selezionare Apri cartella dal menu File.
Nella finestra di dialogo Apri cartella selezionare la cartella CsharpProjects e quindi selezionare Seleziona cartella.
Nella visualizzazione EXPLORER espandere la cartella TestProject e quindi selezionare Program.cs.
Eliminare le righe di codice esistenti.
Questo progetto console C# verrà usato per creare, compilare ed eseguire esempi di codice durante questo modulo.
Chiudere il pannello Terminale.
Creare e testare un'istruzione switch
Assicurarsi di avere aperto Visual Studio Code e che Program.cs sia visualizzato nel pannello Editor.
Annotazioni
Program.cs deve essere vuoto. In caso contrario, selezionare ed eliminare tutte le righe di codice.
Digitare il codice seguente nell'editor di Visual Studio Code:
int employeeLevel = 200; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: title = "Junior Associate"; break; case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");Nel menu File di Visual Studio Code, selezionare Salva.
Il file Program.cs deve essere salvato prima di compilare o eseguire il codice.
Nel pannello ESPLORA RISORSE, per aprire un terminale nel percorso della cartella TestProject, fare clic con il pulsante destro del mouse su TestProject, quindi scegliere Apri nel terminale integrato.
Si aprirà un pannello Terminale. Il terminale deve includere un prompt dei comandi che mostra che il terminale è aperto sul percorso della cartella TestProject.
Nel prompt dei comandi del terminale, digitare dotnet run per eseguire il codice, quindi premere INVIO.
Annotazioni
Se viene visualizzato un messaggio riportante: “Non è stato possibile trovare un progetto da eseguire”, assicurarsi che il prompt dei comandi del terminale visualizzi il percorso previsto della cartella TestProject. Ad esempio:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Verrà visualizzato l'output seguente:
John Smith, Senior AssociateSoffermarsi un momento a esaminare l'istruzione
switchimmessa.Si noti che l'istruzione
switchdefinisce un singolo blocco di codice.L'istruzione
switchdefinisce un singolo blocco di codice che include un elenco di sezioni switch. A destra dellaswitchparola chiave è un'espressione switch racchiusa tra parentesi.Nota l'elenco di sezioni di interruttori all'interno del blocco di codice.
Il
switchblocco di codice contiene un elenco di sezioni switch, ognuna delle quali include una o più etichette switch. Inoltre, ogni sezione switch include un elenco di istruzioni che verrà eseguito se l'etichetta è uguale all'espressione switch definita all'inizio dell'istruzione switch.L'espressione switch viene valutata rispetto alle etichette dei casi dall'alto verso il basso fino a quando non si trova un valore uguale all'espressione switch. Se nessuna delle etichette corrisponde, verrà eseguita la serie di istruzioni per il
defaultcaso. Se non è incluso alcun valore predefinito, il controllo viene trasferito al punto finale dell'istruzione switch. Ogni etichetta deve fornire un tipo di valore corrispondente al tipo specificato nell'espressione switch.Annotazioni
L'etichetta facoltativa
defaultpuò essere visualizzata in qualsiasi posizione all'interno dell'elenco delle sezioni switch. Tuttavia, la maggior parte degli sviluppatori sceglie di inserirla per ultima perché ha più senso (logicamente) di posizionaredefaultcome opzione finale. Indipendentemente dalla posizione, ladefaultsezione verrà valutata per ultima.In questo esempio:
- l'espressione switch è
(employeeLevel) - ogni sezione del switch ha una singola etichetta del switch (
caseodefault). - La sezione switch corrispondente è definita da
case: 200, dal momento cheemployeeLevel = 200.
- l'espressione switch è
Si noti che ogni sezione switch è separata dalla successiva.
È consentita l'esecuzione di una sola sezione switch. Questo significa che il "fall-through" dell'esecuzione di una sezione switch in quella successiva non è consentito. La
breakparola chiave è uno dei diversi modi per terminare una sezione switch prima di passare alla sezione successiva. Se si dimentica la parola chiavebreak(o, facoltativamente, la parola chiavereturn), il compilatore genererà un errore.
Modificare il valore della variabile di livello per vedere come l'istruzione switch lo valuta
Per testare il caso predefinito, cambiamo il livello del dipendente modificando l'assegnazione dei valori.
Per modificare il valore assegnato a
employeeLevel, aggiornare il codice nel modo seguente:int employeeLevel = 201;Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.
Immettere
dotnet rundal prompt dei comandi del terminale per eseguire il codice.Si noti che l'output è stato modificato.
Ora, quando si esegue il codice, verrà visualizzato il titolo più generico usato.
John Smith, AssociateDal momento che
employeeLevelnon corrisponde ad alcuna etichetta, viene corrisposta l'etichettadefault.
Modificare una sezione switch per includere più etichette
Si supponga che la nostra azienda abbia deciso di assegnare a tutti i 100 dipendenti il titolo "Senior Associate", lo stesso titolo dei dipendenti di livello 200. In qualità di sviluppatore, decidi di implementare questa operazione rimuovendo la prima sezione switch appartenente all'etichetta case 100:, e consentendo invece alle etichette case 100: e case 200: di eseguire la stessa sezione switch.
Per modificare il valore assegnato a
employeeLevel, aggiornare il codice nel modo seguente:int employeeLevel = 100;Per assegnare più etichette alla prima sezione switch, aggiornare il codice come segue:
case 100: case 200: title = "Senior Associate"; break;Al termine dell'esecuzione delle modifiche, le modifiche devono corrispondere al codice seguente:
int employeeLevel = 100; string employeeName = "John Smith"; string title = ""; switch (employeeLevel) { case 100: case 200: title = "Senior Associate"; break; case 300: title = "Manager"; break; case 400: title = "Senior Manager"; break; default: title = "Associate"; break; } Console.WriteLine($"{employeeName}, {title}");Salvare il file di codice e quindi usare Visual Studio Code per eseguire il codice.
Immettere
dotnet rundal prompt dei comandi del terminale per eseguire il codice.Verrà visualizzato l'output seguente:
John Smith, Senior AssociateEntrambe le etichette case
100e200sono ora associate alla sezione switch che imposta il titolo sul valore stringaSenior Associate.
Riepilogo
Ecco le principali considerazioni sull'istruzione switch:
- Usare l'istruzione
switchquando si ha un valore con molte corrispondenze possibili, ognuna delle quali richiede un ramo nella logica del codice. - È possibile trovare una corrispondenza per una singola sezione switch contenente la logica del codice usando una o più etichette definite dalla parola chiave
case. - Usare la parola chiave
defaultfacoltativa per creare un'etichetta e una sezione switch da usare quando nessun'altra etichetta del caso corrisponde.