Übung: Implementieren einer switch-Anweisung
- 11 Minuten
Eine switch-Anweisung ist eine C#-Auswahlanweisung, die eine Alternative zu einem if-elseif-else-Verzweigungskonstrukt bietet. Die switch-Anweisung bietet Vorteile gegenüber einem if-elseif-else-Konstrukt, wenn ein einzelner Wert anhand einer Liste bekannter übereinstimmenden Werte ausgewertet wird.
Nehmen Sie das folgende Szenario als Beispiel:
- Sie arbeiten an einer Anwendung im Zusammenhang mit Ernährung. Ein Abschnitt des Codes befasst sich mit Früchten.
- Ihr Code enthält eine Variable namens
fruit, die die Namen verschiedener Obstarten enthält. - Sie haben eine Liste der 20 Früchte, auf die sich Ihre Anwendung konzentriert.
- Sie möchten Ihren Code basierend auf dem Wert branchen, der
fruitzugewiesen ist.
In diesem Szenario können Sie eine switch-Anweisung verwenden, um einen separaten Branch für jede Obstart zu erstellen.
Wie funktioniert eine switch-Anweisung?
Die switch-Anweisung wählt einen Codeabschnitt aus, der aus einer Liste möglicher switch-Abschnitte ausgeführt werden soll. Der ausgewählte switch-Abschnitt wird basierend auf einem Muster ausgewählt, das mit dem Übereinstimmungsausdruck der Anweisung übereinstimmt.
Sehen Sie sich das folgende Codebeispiel an, das die grundlegende Struktur der switch-Anweisung veranschaulicht:
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;
}
Der Vergleichsausdruck (der auch als switch-Ausdruck bezeichnet werden kann) ist der Wert, der dem switch-Schlüsselwort folgt, in diesem Fall (fruit). Jeder switch-Abschnitt wird durch ein Fallmuster definiert. Fallmuster werden mit dem Schlüsselwort case gefolgt von einem Wert erstellt. Das erste Fallmuster in diesem Beispiel ist case "apple":. Fallmuster sind boolesche Ausdrücke, die entweder als true oder false ausgewertet werden. Jede switch-Auswahl enthält eine kleine Anzahl von Codezeilen, die ausgeführt werden, wenn das Fallmuster mit dem Übereinstimmungsausdruck übereinstimmt. Wenn fruit in diesem Beispiel der Wert "apple" zugewiesen wird, wird das erste Fallmuster als true ausgewertet, und dieser switch-Abschnitt wird ausgeführt.
Eine switch-Anweisung muss mindestens einen switch-Abschnitt enthalten, enthält aber normalerweise drei oder mehr switch-Abschnitte.
Die switch-Anweisung wird am besten in folgenden Situationen verwendet:
- Sie verfügen über einen einzelnen Wert (Variable oder Ausdruck), den Sie mit vielen möglichen Werten vergleichen möchten.
- Sie müssen für jede gegebene Übereinstimmung höchstens ein paar Codezeilen ausführen.
Hinweis
Dieses erste Beispiel einer switch-Anweisung ist absichtlich einfach gehalten und Ihre Untersuchung der Syntax war kurz. Sie werden weitere Features der switch-Anweisung untersuchen, wenn Sie einige erweiterte Szenarios in den folgenden Abschnitten durcharbeiten.
Es ist an der Zeit, Ihre Programmierungsumgebung vorzubereiten und mit der Entwicklung eigener switch-Anweisungen zu beginnen.
Vorbereiten Ihrer Programmierumgebung
Dieses Modul enthält praktische Aktivitäten, die Sie durch den Prozess der Erstellung und Ausführung von Demonstrationscode führen. Es wird empfohlen, diese Aktivitäten mit Visual Studio Code als Entwicklungsumgebung durchzuführen. Die Verwendung von Visual Studio Code für diese Aktivitäten vereinfacht das Schreiben und Ausführen von Code in einer Entwicklerumgebung, die von Expert*innen weltweit verwendet wird.
Öffnen Sie Visual Studio Code.
Sie können das Windows-Startmenü (oder eine entsprechende Ressource für ein anderes Betriebssystem) verwenden, um Visual Studio Code zu öffnen.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Navigieren Sie im Dialogfeld Ordner öffnen zum Windows-Ordner „Desktop“.
Wenn Sie Codeprojekte in der Regel in einem anderen Ordner speichern, können Sie stattdessen auch diesen verwenden. Für dieses Training ist es wichtig, einen Ort zu haben, den Sie leicht finden und sich gut merken können.
Klicken Sie im Dialogfeld Ordner öffnen auf Ordner auswählen.
Wenn ein Sicherheitsdialogfeld angezeigt wird, in dem Sie gefragt werden, ob Sie den Autor*innen vertrauen, wählen Sie Ja aus.
Klicken Sie im Visual Studio Code-Menü Terminal die Option Neues Terminal aus.
Beachten Sie, dass eine Eingabeaufforderung im Panel „Terminal“ den Ordnerpfad für den aktuellen Ordner anzeigt. Beispiel:
C:\Users\someuser\Desktop>Hinweis
Wenn Sie auf Ihrem eigenen PC und nicht in einer Sandbox oder gehosteten Umgebung arbeiten und andere Microsoft Learn-Module in dieser C#-Reihe abgeschlossen haben, haben Sie möglicherweise bereits einen Projektordner für Codebeispiele erstellt. In diesem Fall können Sie den nächsten Schritt überspringen, der zum Erstellen einer Konsolen-App im Ordner „TestProject“ verwendet wird.
Geben Sie an der Terminal-Eingabeaufforderung zum Erstellen einer neuen Konsolenanwendung in einem angegebenen Ordner die folgende Eingabeaufforderung ein:
dotnet new console -o ./CsharpProjects/TestProjectDieser .NET-CLI-Befehl verwendet eine .NET-Programmvorlage, um ein neues C#-Konsolenanwendungsprojekt am angegebenen Ordnerspeicherort zu erstellen. Der Befehl erstellt die Ordner „CsharpProjects“ und „TestProject“ für Sie und verwendet „TestProject“ als Namen für Ihre
.csproj-Datei.Wenn eine Meldung angezeigt wird, die Besagt, dass die Dateien bereits vorhanden sind, fahren Sie mit den nächsten Schritten fort. Sie werden die vorhandenen Projektdateien wiederverwenden.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "CsharpProjects ".
Sie sollten den Ordner "TestProject " und zwei Dateien sehen, eine C#-Programmdatei mit dem Namen Program.cs und eine C#-Projektdatei namens TestProject.csproj.
Klicken Sie im Visual Studio Code-Menü Datei auf Ordner öffnen.
Wählen Sie im Dialogfeld "Ordner öffnen " den Ordner "CsharpProjects " und dann " Ordner auswählen" aus.
Erweitern Sie in der EXPLORER-Ansicht den Ordner "TestProject", und wählen Sie dann Program.cs aus.
Löschen Sie die vorhandenen Codezeilen.
Sie verwenden dieses C#-Konsolenprojekt zum Erstellen und Ausführen von Codebeispielen im Rahmen dieses Moduls.
Schließen Sie das Panel „Terminal“.
Erstellen und Testen einer switch-Anweisung
Stellen Sie sicher, dass Visual Studio Code geöffnet ist und „Program.cs“ im Editor-Bereich angezeigt wird.
Hinweis
„Program.cs“ sollte leer sein. Wenn dies nicht der Fall ist, wählen Sie alle Codezeilen aus, und löschen Sie sie.
Geben Sie den folgenden Code in den Visual Studio Code-Editor ein:
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}");Wählen Sie im Visual Studio Code-Menü Datei die Option Speichern aus.
Die Datei „Program.cs“ muss vor dem Erstellen oder Ausführen des Codes gespeichert werden.
Klicken Sie im Panel „Explorer“ mit der rechten Maustaste auf TestProject, und klicken Sie dann auf In integriertem Terminal öffnen, um ein Terminal am Speicherort des TestProject-Ordners zu öffnen.
Ein Terminalbereich wird geöffnet. Der Terminalbereich sollte eine Eingabeaufforderung enthalten, die anzeigt, dass das Terminal am Speicherort Ihres Ordners „TestProject“ geöffnet ist.
Geben Sie an der Eingabeaufforderung des Terminals dotnet run ein, um Ihren Code auszuführen, und drücken Sie dann die EINGABETASTE.
Hinweis
Wenn die Meldung „Es wurde kein ausführbares Projekt gefunden“ angezeigt wird, stellen Sie sicher, dass in der Eingabeaufforderung des Terminals der erwartete Speicherort des Ordners „TestProject“ angezeigt wird. Beispiel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Die folgende Ausgabe wird angezeigt.
John Smith, Senior AssociateNehmen Sie sich kurz Zeit, um die von Ihnen eingegebene
switch-Anweisung zu überprüfen.Beachten Sie, dass die
switch-Anweisung einen einzelnen Codeblock definiert.Die
switch-Anweisung definiert einen einzelnen Codeblock, der eine Liste von switch-Abschnitten enthält. Rechts neben demswitch-Schlüsselwort befindet sich ein Switch-Ausdruck, der in Klammern eingeschlossen ist.Beachten Sie die Liste der switch-Abschnitte innerhalb des Codeblocks.
Der
switch-Codeblock enthält eine Liste von switch-Abschnitten, die jeweils eine oder mehrere switch-Bezeichnungen enthalten. Darüber hinaus enthält jeder switch-Abschnitt eine Anweisungsliste, die ausgeführt wird, wenn die Bezeichnung dem switch-Ausdruck entspricht, der oben in der switch-Anweisung definiert ist.Der switch-Ausdruck wird mit den Fallbezeichnungen von oben nach unten ausgewertet, bis ein Wert gefunden wird, der dem switch-Ausdruck entspricht. Wenn keine der Bezeichnungen übereinstimmen, wird die Anweisungsliste für den
default-Fall ausgeführt. Wenn kein Standardwert enthalten ist, wird das Steuerelement an den Endpunkt der switch-Anweisung übertragen. Jede Bezeichnung muss einen Werttyp bereitstellen, der dem im switch-Ausdruck angegebenen Typ entspricht.Hinweis
Die optionale
default-Bezeichnung kann an jeder Position in der Liste der switch-Abschnitte angezeigt werden. Die meisten Entwickler*innen entscheiden sich jedoch für die letzte Option, da es sinnvoller (logisch) ist,defaultals letzte Option zu positionieren. Unabhängig von der Position wird derdefault-Abschnitt zuletzt ausgewertet.In unserem Beispiel gilt Folgendes:
- Der switch-Ausdruck ist
(employeeLevel). - Jeder switch-Abschnitt hat eine einzelne switch-Bezeichnung (
caseoderdefault). - Der entsprechende switch-Abschnitt wird durch
case: 200definiert, daemployeeLevel = 200.
- Der switch-Ausdruck ist
Beachten Sie, dass jeder switch-Abschnitt vom nächsten getrennt ist.
Es darf nur ein switch-Abschnitt ausgeführt werden. Das bedeutet, dass die Ausführung eines switch-Abschnitts nicht zum nächsten switch-Abschnitt „übergehen“ darf. Das
break-Schlüsselwort ist eine von mehreren Möglichkeiten, einen switch-Abschnitt zu beenden, bevor er zum nächsten Abschnitt übergeht. Wenn Sie dasbreak-Schlüsselwort (oder optional das Schlüsselwortreturn) vergessen, generiert der Compiler einen Fehler.
Ändern des Werts der Ebenenvariablen, um ihre Auswertung durch die switch-Anweisung zu prüfen
Um den Standardfall zu üben, ändern wir die Ebene des Mitarbeiters, indem wir die Wertzuweisung ändern.
Um den zugewiesenen Wert in
employeeLevelzu ändern, aktualisieren Sie den Code wie folgt:int employeeLevel = 201;Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus.
Geben Sie
dotnet runüber die Eingabeaufforderung am Terminal ein, um Ihren Code auszuführen.Beachten Sie, wie sich die Ausgabe verändert hat.
Wenn Sie den Code ausführen, sollte jetzt der allgemeinere Titel verwendet werden.
John Smith, AssociateDa
employeeLevelmit keiner Bezeichnung übereinstimmt, wird die Bezeichnungdefaultverglichen.
Ändern eines switch-Abschnitts zum Einschließen mehrerer Bezeichnungen
Angenommen, unser Unternehmen hat sich entschieden, allen Mitarbeitern und Mitarbeiterinnen der Ebene 100 den Titel „Leitende*r Mitarbeiter*in“ zu verleihen – denselben Titel wie den Mitarbeitern und Mitarbeiterinnen der Ebene 200. Als Entwickler*in entscheiden Sie sich dafür, dies durch Entfernen des ersten zur Bezeichnung case 100: gehörenden switch-Abschnitts zu implementieren und stattdessen zuzulassen, dass sowohl die Bezeichnungen case 100: als auch case 200: denselben switch-Abschnitt ausführen.
Um den zugewiesenen Wert in
employeeLevelzu ändern, aktualisieren Sie den Code wie folgt:int employeeLevel = 100;Um dem ersten switch-Abschnitt mehrere Bezeichnungen zuzuweisen, aktualisieren Sie Ihren Code wie folgt:
case 100: case 200: title = "Senior Associate"; break;Wenn Sie mit den Änderungen fertig sind, sollten die Änderungen dem folgenden Code entsprechen:
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}");Speichern Sie Ihre Codedatei, und führen Sie Ihren Code dann mit Visual Studio Code aus.
Geben Sie
dotnet runüber die Eingabeaufforderung am Terminal ein, um Ihren Code auszuführen.Die folgende Ausgabe wird angezeigt.
John Smith, Senior AssociateBeide case-Bezeichnungen (
100und200) werden jetzt mit dem switch-Abschnitt gekoppelt, der den Titel auf den ZeichenfolgenwertSenior Associatefestlegt.
Zusammenfassung
Die wichtigsten Erkenntnisse zur switch-Anweisung:
- Verwenden Sie die
switch-Anweisung, wenn ein Wert mit vielen möglichen Übereinstimmungen vorliegt, wobei jede Übereinstimmung einen Zweig in Ihrer Codelogik erfordert. - Ein einzelner switch-Abschnitt, der Codelogik enthält, kann mit einer oder mehreren Bezeichnungen verglichen werden, die durch das Schlüsselwort
casedefiniert sind. - Verwenden Sie das optionale Schlüsselwort
default, um eine Bezeichnung und einen switch-Abschnitt zu erstellen, die verwendet werden, wenn keine anderen Fallbezeichnungen übereinstimmen.