Oefening: een switch-instructie implementeren
- 11 minuten
Een switch instructie is een C#-selectie-instructie die een alternatief biedt voor een if-elseif-else vertakkingsconstructie. De switch instructie biedt voordelen ten opzichte van een if-elseif-else constructie bij het evalueren van één waarde op basis van een lijst met bekende overeenkomende waarden.
Houd rekening met het volgende scenario:
- U werkt aan een toepassing met betrekking tot voedselvoeding. Een gedeelte van de code gaat over fruit.
- Uw code bevat een variabele met de naam
fruitdie wordt gebruikt voor het opslaan van de naam van verschillende soorten fruit. - U hebt een lijst met de 20 vruchten waarop uw toepassing is gericht.
- U wilt uw code vertakken op basis van de waarde die is toegewezen aan
fruit.
In dit scenario kunt u een switch verklaring gebruiken om een afzonderlijke vertakking te maken voor elk type fruit.
Hoe werkt een switch-statement?
De switch instructie kiest één sectie met code die moet worden uitgevoerd vanuit een lijst met mogelijke switchsecties. De geselecteerde switchsectie wordt gekozen op basis van een patroonmatch met de matchexpressie van de instructie.
Bekijk het volgende codevoorbeeld dat de basisstructuur van de switch-instructie laat zien.
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;
}
De match-uitdrukking (die ook wel de switch-expressie wordt genoemd) is de waarde die volgt op het switch trefwoord, (fruit). Elke switchsectie wordt gedefinieerd door een casepatroon. Casepatronen worden samengesteld met behulp van het trefwoord case gevolgd door een waarde. Het eerste casepatroon in dit voorbeeld is: case "apple":. Casepatronen zijn Booleaanse expressies die resulteren in true of false. Elke switch-sectie bevat een klein aantal coderegels die worden uitgevoerd als het casepatroon overeenkomt met de matchuitdrukking. Als in dit voorbeeld fruit een waarde van 'apple' is toegewezen, wordt het eerste casepatroon geëvalueerd als true en wordt die switchsectie uitgevoerd.
Een switch-instructie moet ten minste één switchsectie bevatten, maar bevat normaal gesproken drie of meer switchsecties.
De schakelaar wordt het beste gebruikt wanneer:
- U hebt één waarde (variabele of expressie) die u wilt vergelijken met veel mogelijke waarden.
- Voor elke match hoeft u slechts een paar regels code uit te voeren.
Opmerking
Dit eerste voorbeeld van een switch instructie is doelbewust eenvoudig en het onderzoek van de syntaxis was kort. U bekijkt aanvullende functies van de switch instructie wanneer u enkele geavanceerdere scenario's in de onderstaande secties doorloopt.
Het is tijd om uw ontwikkelomgeving voor te bereiden en uw eigen switch instructies te ontwikkelen.
Uw coderingsomgeving voorbereiden
Deze module bevat praktische activiteiten die u begeleiden bij het bouwen en uitvoeren van demonstratiecode. We raden u aan om deze activiteiten uit te voeren met behulp van Visual Studio Code als uw ontwikkelomgeving. Het gebruik van Visual Studio Code voor deze activiteiten helpt u om comfortabeler code te schrijven en uit te voeren in een ontwikkelomgeving die wordt gebruikt door professionals wereldwijd.
Open Visual Studio Code.
U kunt de Windows-Startmenu (of een equivalente resource voor een ander besturingssysteem) gebruiken om Visual Studio Code te openen.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Navigeer in het dialoogvenster Map openen naar de map Windows Desktop.
Als u een andere maplocatie hebt waar u codeprojecten bewaart, kunt u die maplocatie gebruiken. Voor deze training is het belangrijk om een locatie te hebben die gemakkelijk te vinden en te onthouden is.
Selecteer in het dialoogvenster Map openen de optie Selecteer Map.
Als u een beveiligingsdialoogvenster ziet waarin u wordt gevraagd of u de auteurs vertrouwt, selecteert u Ja.
Selecteer In het menu Visual Studio Code Terminal de optie Nieuwe terminal.
U ziet dat in een opdrachtprompt in het terminalvenster het mappad voor de huidige map wordt weergegeven. Voorbeeld:
C:\Users\someuser\Desktop>Opmerking
Als u op uw eigen pc werkt in plaats van in een sandbox of gehoste omgeving en u andere Microsoft Learn-modules in deze C#-serie hebt voltooid, hebt u mogelijk al een projectmap gemaakt voor codevoorbeelden. Als dat het geval is, kunt u de volgende stap overslaan, die wordt gebruikt om een console-app te maken in de map TestProject.
Voer bij de terminalopdrachtprompt de volgende prompt in om een nieuwe consoletoepassing in een opgegeven map te maken:
dotnet new console -o ./CsharpProjects/TestProjectDeze .NET CLI-opdracht maakt gebruik van een .NET-programmasjabloon om een nieuw C#-consoletoepassingsproject te maken op de opgegeven maplocatie. Met de opdracht worden de mappen CsharpProjects en TestProject voor u gemaakt en wordt TestProject gebruikt als de naam van uw
.csprojbestand.Als er een bericht wordt weergegeven waarin wordt aangegeven dat de bestanden al bestaan, gaat u verder met de volgende stappen. U gebruikt de bestaande projectbestanden opnieuw.
Vouw in de EXPLORER-weergave de map CsharpProjects uit .
U ziet de map TestProject en twee bestanden, een C#-programmabestand met de naam Program.cs en een C#-projectbestand met de naam TestProject.csproj.
Selecteer Map openen in het menu Visual Studio Code-bestand.
Selecteer in het dialoogvenster Map openen de map CsharpProjects en klik vervolgens op Map selecteren.
Vouw in de explorer-weergave de map TestProject uit en selecteer Program.cs.
Verwijder de bestaande coderegels.
U gebruikt dit C#-consoleproject om codevoorbeelden te maken, te bouwen en uit te voeren tijdens deze module.
Sluit het deelvenster Terminal.
Een switchinstructie maken en testen
Zorg ervoor dat Visual Studio Code is geopend en Program.cs weergegeven in het deelvenster Editor.
Opmerking
Program.cs moet leeg zijn. Als dat niet het geval is, selecteer en verwijder dan alle coderegels.
Typ de volgende code in de Visual Studio Code-editor:
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}");Selecteer Opslaan in het menu Visual Studio Code File.
Het Program.cs-bestand moet worden opgeslagen voordat u de code bouwt of uitvoert.
Klik in het deelvenster EXPLORER om een Terminal te openen op de locatie van de map TestProject met de rechtermuisknop op TestProject en selecteer Vervolgens Openen in geïntegreerde terminal.
Er wordt een Terminal paneel geopend. De Terminal moet een opdrachtprompt bevatten waarin wordt aangegeven dat de terminal is geopend voor de locatie van de map TestProject.
Typ dotnet-run bij de Terminal-opdrachtprompt en druk op Enter om uw code uit te voeren.
Opmerking
Als er een bericht wordt weergegeven met de tekst 'Kan een project niet vinden om uit te voeren', controleert u of in de Terminal-opdrachtprompt de verwachte locatie van de testprojectmap wordt weergegeven. Bijvoorbeeld:
C:\Users\someuser\Desktop\csharpprojects\TestProject>U ziet nu de volgende uitvoer:
John Smith, Senior AssociateNeem een minuut de tijd om de
switchverklaring die u hebt ingevoerd te bekijken.U ziet dat de
switchinstructie één codeblok definieert.De
switchinstructie definieert één codeblok dat een lijst met switchsecties bevat. Rechts van hetswitchtrefwoord staat een schakelexpressie tussen haakjes.U ziet de lijst met switchsecties in het codeblok.
Het
switchcodeblok bevat een lijst met switchsecties, die elk een of meer switchlabels bevatten. Daarnaast bevat elke switchsectie een instructielijst die wordt uitgevoerd als het label gelijk is aan de switchexpressie die boven aan de switchinstructie is gedefinieerd.De switchexpressie wordt geëvalueerd op basis van de hoofdletterlabels van boven naar beneden totdat een waarde die gelijk is aan de switchexpressie wordt gevonden. Als geen van de labels overeenkomt, wordt de instructielijst voor de
defaultcase uitgevoerd. Als er geen standaardwaarde is opgenomen, wordt het besturingselement overgebracht naar het eindpunt van de switchinstructie. Elk label moet een waardetype opgeven dat overeenkomt met het type dat is opgegeven in de switchexpressie.Opmerking
Het optionele
defaultlabel kan op elke positie in de lijst met schakelsecties worden weergegeven. De meeste ontwikkelaars kiezen er echter voor om het laatst te plaatsen, omdat het logischer (logisch) is om als laatste optie te positionerendefault. Ongeacht de positie wordt dedefaultsectie als laatste geëvalueerd.In ons voorbeeld:
- de switch-expressie is
(employeeLevel) - elke switchsectie heeft één switchlabel (
caseofdefault). - de overeenkomende switchsectie wordt gedefinieerd door
case: 200, sindsemployeeLevel = 200.
- de switch-expressie is
U ziet dat elke schakelsectie gescheiden is van de volgende.
Er mag slechts één switchsectie worden uitgevoerd. Dit betekent dat de uitvoering van een switchsectie niet automatisch mag doorgaan naar de volgende switchsectie. Het
breaktrefwoord is een van de verschillende manieren om een schakelsectie te beëindigen voordat het naar de volgende sectie gaat. Als u het trefwoordbreak(of optioneel het trefwoordreturn) vergeet, wordt er een fout gegenereerd door de compiler.
Wijzig de waarde van de niveauvariabele om te zien hoe de switch-instructie deze evalueert
Als u de standaardcase wilt uitvoeren, gaan we het niveau van de werknemer wijzigen door de waardetoewijzing te wijzigen.
Als u de waarde wilt wijzigen die is
employeeLeveltoegewezen, werkt u de code als volgt bij:int employeeLevel = 201;Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.U ziet dat de uitvoer is gewijzigd.
Wanneer u de code uitvoert, ziet u nu de algemenere titel die wordt gebruikt.
John Smith, AssociateOmdat de
employeeLevellabels niet overeenkomen, wordt hetdefaultlabel vergeleken.
Een schakelsectie wijzigen om meerdere labels op te nemen
Stel dat ons bedrijf heeft besloten om alle werknemers op niveau 100 de titel Senior Associate te geven, dezelfde titel als werknemers op niveau 200. Als ontwikkelaar besluit u dit te implementeren door de eerste switchsectie die deel uitmaakt van het label case 100:te verwijderen en in plaats daarvan toe te staan dat zowel de als case 100: de case 200: labels dezelfde switchsectie uitvoeren.
Als u de waarde wilt wijzigen die is
employeeLeveltoegewezen, werkt u de code als volgt bij:int employeeLevel = 100;Als u meerdere labels wilt toewijzen aan de eerste switchsectie, werkt u uw code als volgt bij:
case 100: case 200: title = "Senior Associate"; break;Wanneer u klaar bent met het aanbrengen van wijzigingen, moeten uw wijzigingen overeenkomen met de volgende code:
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}");Sla uw codebestand op en gebruik Visual Studio Code om uw code uit te voeren.
Voer
dotnet runvanaf de Terminal-opdrachtprompt in om uw code uit te voeren.U ziet nu de volgende uitvoer:
John Smith, Senior AssociateBeide caselabels
100en200zijn nu gekoppeld aan de schakelsectie waarmee de titel wordt ingesteld op de tekenreekswaardeSenior Associate.
Samenvatting
Hier volgen de belangrijkste leerpunten die u hebt geleerd over de switch-instructie:
- Gebruik de
switchinstructie wanneer u één waarde met veel mogelijke overeenkomsten hebt, waarbij elke overeenkomst een vertakking in uw codelogica vereist. - Eén switchsectie met codelogica kan worden vergeleken met een of meer labels die zijn gedefinieerd door het
casetrefwoord. - Gebruik het optionele
defaulttrefwoord om een label en een schakelgedeelte aan te maken dat wordt gebruikt wanneer geen andere case-labels overeenkomen.
De kennistoets
Feedback
Is deze pagina nuttig?
Nee
Need help with this topic?
Want to try using Ask Learn to clarify or guide you through this topic?