Övning – Skapa och konfigurera för iterationsloopar
- 14 minuter
På ytan är -instruktionen for en annan iterationssats som gör att du kan iterera genom ett kodblock och därmed ändra körningsflödet för koden. Men när vi undersöker hur var och en fungerar kan vi bättre identifiera nyanserna i varje iterationsinstruktion och när de ska användas.
Vad är påståendet for ?
Instruktionen for itererar genom ett kodblock ett visst antal gånger. Den här kontrollnivån gör instruktionen for unik bland de andra iterationsinstruktionerna. Instruktionen foreach itererar genom ett kodblock en gång för varje objekt i en sekvens med data som en matris eller samling. Instruktionen while itererar genom ett kodblock tills ett villkor uppfylls.
Dessutom ger -instruktionen for dig mycket mer kontroll över iterationsprocessen genom att exponera villkoren för iteration.
I den här övningen använder du -instruktionen for och lär dig hur du styr iterationens förvillkor, slutförandevillkor, dess iterationsmönster med mera. Dessutom får du lära dig om vanliga användningsfall för instruktionen for.
Nu ska vi förbereda kodningsmiljön och börja vår undersökning av kodexempel som implementerar en for -instruktion.
Förbereda din kodningsmiljö
Den här modulen innehåller praktiska aktiviteter som vägleder dig genom processen att skapa och köra demonstrationskod. Vi rekommenderar att du slutför dessa aktiviteter med Visual Studio Code som utvecklingsmiljö. Genom att använda Visual Studio Code för dessa aktiviteter kan du bli mer bekväm med att skriva och köra kod i en utvecklarmiljö som används av proffs över hela världen.
Öppna Visual Studio Code.
Du kan använda Windows Start-menyn (eller motsvarande resurs för ett annat operativsystem) för att öppna Visual Studio Code.
På menyn Visual Studio Code-fil väljer du Öppna mapp.
I dialogrutan Öppna mapp navigerar du till mappen Windows Desktop.
Om du har en annan mappplats där du behåller kodprojekt kan du använda den mappplatsen i stället. För den här utbildningen är det viktigt att ha en plats som är lätt att hitta och komma ihåg.
I dialogrutan Öppna mapp väljer du Välj mapp.
Om du ser en säkerhetsdialogruta som frågar om du litar på författarna väljer du Ja.
Välj Ny terminal på visual Studio Code-terminalmenyn.
Observera att en kommandotolk i terminalpanelen visar mappsökvägen för den aktuella mappen. Till exempel:
C:\Users\someuser\Desktop>Anmärkning
Om du arbetar på din egen dator i stället för i en sandbox-miljö eller en värdbaserad miljö och du har slutfört andra Microsoft Learn-moduler i den här C#-serien kanske du redan har skapat en projektmapp för kodexempel. I så fall kan du hoppa över nästa steg, som används för att skapa en konsolapp i mappen TestProject.
I terminalkommandot anger du följande fråga för att skapa ett nytt konsolprogram i en angiven mapp:
dotnet new console -o ./CsharpProjects/TestProjectDet här .NET CLI-kommandot använder en .NET-programmall för att skapa ett nytt C#-konsolprogramprojekt på den angivna mappplatsen. Kommandot skapar mapparna CsharpProjects och TestProject åt dig och använder TestProject som namnet på filen
.csproj.Om ett meddelande visas som talar om för dig att filerna redan finns fortsätter du med nästa steg. Du återanvänder de befintliga projektfilerna.
I utforskarvyn expanderar du mappen CsharpProjects .
Du bör se mappen TestProject och två filer, en C#-programfil med namnet Program.cs och en C#-projektfil med namnet TestProject.csproj.
På menyn Visual Studio Code-fil väljer du Öppna mapp.
I dialogrutan Öppna mapp väljer du mappen CsharpProjects och väljer sedan Välj mapp.
I explorer-vyn expanderar du mappen TestProject och väljer sedan Program.cs.
Ta bort de befintliga kodraderna.
Du kommer att använda det här C#-konsolprojektet för att skapa, skapa och köra kodexempel under den här modulen.
Stäng terminalpanelen.
Skriv en grundläggande for-sats
Kontrollera att Visual Studio Code är öppet och Program.cs visas i redigeringspanelen.
Anmärkning
Program.cs ska vara tom. Om det inte är så, välj och ta bort alla kodrader.
Skriv följande kod i Visual Studio Code-redigeraren.
for (int i = 0; i < 10; i++) { Console.WriteLine(i); }Den här koden visar en enkel
forinstruktion som loopar igenom dess kodblock 10 gånger och skriver ut det aktuella värdet föri.På menyn Visual Studio Code-fil väljer du Spara.
Filen Program.cs måste sparas innan du skapar eller kör koden.
I explorer-panelen öppnar du en terminal på mappen TestProject genom att högerklicka på TestProject och sedan välja Öppna i integrerad terminal.
En terminalpanel öppnas. Terminalen bör innehålla en kommandotolk som visar att terminalen är öppen för mappen TestProject.
I kommandotolken i Terminal skriver du dotnet run och trycker sedan på Retur för att köra koden.
Anmärkning
Om du ser ett meddelande med texten "Det gick inte att hitta ett projekt att köra" kontrollerar du att Terminal-kommandotolken visar den förväntade platsen för TestProject-mappen. Till exempel:
C:\Users\someuser\Desktop\csharpprojects\TestProject>Du bör se följande resultat.
0 1 2 3 4 5 6 7 8 9Ta en minut för att identifiera de sex delarna av instruktionen
for.-
forinstruktionen innehåller följande sex delar:- Nyckelordet
for. - En uppsättning parenteser som definierar villkoren
forför iteration. Parenteserna innehåller tre distinkta delar, avgränsade med slutet av instruktionsoperatorn, ett semikolon. - Den första delen definierar och initierar iteratorvariabeln. I det här exemplet:
int i = 0. Det här avsnittet kallas initialiseraren. - Den andra delen definierar slutförandevillkoret. I det här exemplet:
i < 10. Med andra ord fortsätter körningen att iterera över koden i kodblocket under instruktionenformedaniär mindre än10. Näriblir lika med10slutar körningen att utföra kodblocket förfor-satsen. Dokumenten refererar till det här avsnittet som villkoret. - Den tredje delen definierar vilken åtgärd som ska vidtas efter varje iteration. I det här fallet ökar värdet
i++med 1 efter varje iterationi. Dokumenten refererar till det här avsnittet som iterator. - Slutligen kodblocket. Kodblocket innehåller den kod som ska köras för varje iteration. Observera att värdet
irefereras i kodblocket. Dokumenten refererar till det här avsnittet som brödtext.
Med tanke på våra regler för namngivningsvariabler kanske du undrar om
iär ett giltigt namn för variabeln som innehåller den aktuella iterationen. I det här fallet ansesiav de flesta vara giltigt. Andra populära alternativ ärxochcounter. Namnetjanvänds också i dessa situationer när du har en yttreforinstruktion som använderioch behöver skapa en iterationsvariabel för en inreforinstruktion.Anmärkning
Alla tre avsnitten (initierare, villkor och iterator) är valfria. I praktiken används dock vanligtvis alla tre avsnitten.
- Nyckelordet
Ändra iterationsvillkoren
Som vi sade i början har -instruktionen for två unika egenskaper bland iterationsuttrycken.
- -instruktionen
forska användas när du vet hur många gånger du behöver iterera genom ett kodblock i förväg. - Med instruktionen
forkan du styra hur varje iteration hanteras.
Vad händer om vi behöver iterera genom ett kodblock, men vill räkna ned i stället för att räkna upp?
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
for (int i = 10; i >= 0; i--) { Console.WriteLine(i); }Det tar en minut att granska den uppdaterade koden.
Genom att ändra de tre delarna i -instruktionen
forändrar vi dess beteende.- Vi initierar iterationsvariabeln till 10.
- Vi ändrar villkoren för att slutföra instruktionen
fornäriär mindre än0. - Vi ändrar iteratorns mönster till att subtrahera
1frånivarje gång vi slutför en iteration.
Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera att utdata har ändrats.
När du kör koden visas följande utdata.
10 9 8 7 6 5 4 3 2 1 0
Experimentera med iteratorns mönster
Vad händer om vi vill hoppa över vissa värden i iteratorvariabeln?
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
for (int i = 0; i < 10; i += 3) { Console.WriteLine(i); }Det tar en minut att granska den uppdaterade koden.
I stället för att öka eller minska värdet för iteratorvariabeln med
1använderi += 3vi för att hoppa över två värden efter varje iteration.Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera hur utdata har ändrats.
När du kör koden visas följande utdata.
0 3 6 9Visserligen kommer du inte att göra den här typen av saker ofta, men förhoppningsvis kan du uppskatta att du har en detaljerad nivå av kontroll över iterationerna om du någonsin behöver det.
Använd nyckelordet break för att bryta iterationsinstruktionen
Vad händer om vi behöver avsluta iterationsuttrycket i förtid baserat på något villkor? Vi kan använda nyckelordet break .
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
for (int i = 0; i < 10; i++) { Console.WriteLine(i); if (i == 7) break; }Det tar en minut att granska användningen av nyckelordet
breaki den uppdaterade koden.Vi såg nyckelordet
breakför första gången i modulen "Branch the flow of code using the switch-case construct in C#". Det visar sig att vi kan använda nyckelordetbreakför att avsluta iterationsinstruktioner också.Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera hur utdata har ändrats.
När du kör koden visas följande utdata.
0 1 2 3 4 5 6 7
Loopa igenom varje element i en matris
En vanlig användning för -instruktionen for är att iterera genom en matris med element, särskilt om du behöver viss kontroll över hur iterationen sker.
foreach När den itererar genom varje element i arrayen, kan instruktionen for justeras för att ge mer anpassning.
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = names.Length - 1; i >= 0; i--) { Console.WriteLine(names[i]); }Det tar en minut att granska den uppdaterade koden.
Observera först att vi har instansierat en strängmatris med namnet
namessom innehåller fyra namn.Observera sedan att vi använder
Array.Lengthegenskapen för att hämta antalet element i matrisen och att vi använder det här värdet för att initiera vår iteratorvariabel (int i = names.Length - 1). Vi subtraherar 1 från värdet eftersom indexnumret för matriselement är nollbaserat (indexnumren för de fyra elementen är 0–3).Observera slutligen att vi har valt att iterera genom matrisen bakåt – något som vi inte kan göra med -instruktionen
foreach. Vi använder värdet för iterationsvariabeln i kodblocket för att ange indexnumret för matriselementen (names[i]).Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera att matriselementen visas i omvänd ordning (som vi avsåg).
När du kör koden visas följande utdata.
Michael David Eddie AlexAnmärkning
Vi kunde ha itererat framåt genom matriselementen genom att konstruera -instruktionen
forpå följande sätt:for (int i = 0; i < names.Length; i++).
Granska begränsningen för foreach-instruktionen
Vad händer om du vill uppdatera ett värde i matrisen under en foreach iteration?
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
string[] names = { "Alex", "Eddie", "David", "Michael" }; foreach (var name in names) { // Can't do this: if (name == "David") name = "Sammy"; }Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera felmeddelandet som visas.
Om du försöker kompilera och köra den här koden visas ett undantag.
Cannot assign to name because it is a 'foreach iteration variable'Med andra ord kan du inte omtilldela värdet
nameför eftersom det är en del av iterationensforeachinre implementering.
Övervinna begränsningen för foreach-instruktionen med for-instruktionen
Nu ska vi försöka använda en for -instruktion för att ändra innehållet i en matris i iterationskodblocket.
Använd Visual Studio Code-redigeraren för att uppdatera koden på följande sätt:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) if (names[i] == "David") names[i] = "Sammy"; foreach (var name in names) Console.WriteLine(name);Det tar en minut att granska den uppdaterade koden.
Observera att vi tog bort klammerparenteserna från kodblocken som bara innehöll en enda kodrad. Den här revisionen använder samma teknik som vi pratade om i modulen "Kontrollera variabelomfång och logik med hjälp av kodblock i C#". Många utvecklare tycker att den här stilen är svår att läsa, medan andra föredrar den här förkortade stilen eftersom den hjälper dem att skriva mer kortfattat och mer uttrycksfullt. Om det är svårt att läsa den här koden, eller om du bara inte föredrar den här stilen, kan du vara säker på att klammerparenteserna alltid kan användas i kodblocken. Om du vill kan du uppdatera koden i redigeringspanelen med följande kod:
string[] names = { "Alex", "Eddie", "David", "Michael" }; for (int i = 0; i < names.Length; i++) { if (names[i] == "David") { names[i] = "Sammy"; } } foreach (var name in names) { Console.WriteLine(name); }Spara kodfilen och använd sedan Visual Studio Code för att köra koden.
Ange
dotnet runfrån Terminal-kommandotolken för att köra koden.Observera att koden körs utan fel och genererar önskade utdata.
När du kör koden visas följande utdata.
Alex Eddie Sammy MichaelEftersom matrisen inte är direkt en del av iterationssatsens implementering kan du ändra värden i matrisen.
Sammanfattning
Här är några av lärdomarna från den här lektionen:
- Med
foriterationssatsen kan du iterera genom ett kodblock ett visst antal gånger. - Med
foriterationssatsen kan du styra alla aspekter av iterationens mekanik genom att ändra de tre villkoren inom parenteserna: initieraren, villkoret och iteratorn. - Det är vanligt att använda -instruktionen
fornär du behöver styra hur du vill iterera genom varje objekt i en matris. - Om kodblocket bara har en kodrad kan du eliminera klammerparenteser och tomt utrymme om du vill.
Kunskapstest
Feedback
Var den här sidan till hjälp?
No
Behöver du hjälp med det här ämnet?
Vill du prova att använda Fråga Lär för att klargöra eller vägleda dig genom det här ämnet?