Csharp:Løkker
Fra CodeWiki
Innhold |
Løkker i C#
C# støtter flere forskjellige type løkker. En løkke er en struktur som skal føre til at kode blir utført flere ganger etter hverandre.
while løkker
Denne løkken tar ett parameter, og koden inne i løkken utføres så lenge dette parameteret returnerer true. Det finnes to varianter av while løkken, nemlig while, og do while.
while(program_is_running) { // kode } do { // kode }while(program_is_running);
Forskjellen er når testen blir utført, i første eksempelet vil koden bli utført etter testen, i andre eksempelet bli koden utført før testen.
for løkker
Denne tar 3 parameter, hvor alle tre er valgfri. parmeterne skilles med semikolon, fordi det er kode, og ikke verdier som brukes. Det første parameteret er initialiseringsparameteret, denne brukes til å sette en verdi, og/eller deklarere variabler. Det andre parameteret er testparameteret, så løkken vil utføres så lenge dette parameteret returnerer true (samme som i while løkke med andre ord). Det siste parameteret er iteratorparameteret, denne brukes til å f.eks. inkrementere en variabel.
for eksempel for å telle fra 1 til 100
for(int i = 1; i <= 100; i++) { Console.WriteLine(i.ToString()); }
foreach løkker
Denne løkken brukes til å gå igjennom hvert objekt i et IEnumerable objekt, f.eks. et array, List<T>, Collection eller lignende. Syntaksen er enkel, og det er ingen teller eller lignende. Enkleste måten å lære dette på, er ved eksempel. Sett at vi har et int array som inneholder tall fra 1 til 100 (int[] counter)
foreach(int item in counter) { Console.WriteLine(item.ToString()); }
yield return
Dette er ikke egentlig en løkke, men er relatert til løkker ved at den brukes i egendefinerte IEnumerable løkker. Denne funksjonen returnerer en verdi fra funksjonen og kontrollen tilbake til den kallende funksjonen, uten å miste instruksjonspekeren. Fordelen med dette er at en kan iterere over et array uten å måtte kalle callback funksjoner eller lignende. Det er strenge regler for hvor yield return kan brukes, og hvordan den brukes. Yield return kan ikke brukes i unsafe kodeblokker, innenfor try catch med en eller flere catch blokker, og heller ikke i anonyme funksjoner.
public static class Program { public static IEnumerable CountTo(int roof) { for(int i = 1; i <= roof; i++) { yield return i; } } public static void Main() { foreach(int i in CountTo(100)) { Console.WriteLine(i.ToString()); } } }
