Drop hier links of afbeeldingen om ze aan de editor toe te voegen.

Een array is een verzameling van elementen die samen onder één naam zitten. In C# noemen we zo’n verzameling ook wel een collection. Tot nu toe overliep je de elementen van een array met een for-lus en een index: je telde een indexvariabele op van 0 tot het aantal elementen, en gebruikte die index om bij elk element te geraken.

Heel vaak wil je gewoon alle elementen één voor één overlopen, zonder dat je de index zelf nodig hebt. Daarvoor bestaat er een handigere lus: de foreach-lus.

Hoe ziet een foreach-lus eruit?

De foreach-lus loopt automatisch over elk element van een array of collection. Bij elke ronde stopt ze het volgende element in een variabele die je zelf een naam geeft.

foreach (int element in getallen)
{
    // statements: deze worden uitgevoerd voor elk element
}

Je leest dit als: “voor elk element (een int) in getallen, doe het volgende”. De onderdelen:

OnderdeelWat het betekent
intHet type van de elementen in de array. Bij een array van gehele getallen is dat int, bij een array van strings string, ...
elementDe naam die jij kiest voor de variabele. Bij elke ronde bevat ze het volgende element van de array.
getallenDe array (of collection) waarvan je de elementen wil overlopen.

Je hoeft dus zelf geen indexvariabele bij te houden, geen getallen.Length te schrijven en geen getallen[i] te gebruiken: de foreach-lus regelt dat allemaal.

Een uitgewerkt voorbeeld

Stel dat we een array met enkele getallen hebben, en die allemaal willen tonen op het scherm:

int[] getallen = { 3, 8, 1, 4 };

foreach (int getal in getallen)
{
    Console.WriteLine(getal);
}

De lus draait vier keer, want er zitten vier elementen in de array. Bij de eerste ronde is getal gelijk aan 3, dan 8, dan 1, en ten slotte 4. De uitvoer is dus:

3
8
1
4

Wil je hetzelfde doen met een for-lus, dan zou je dit moeten schrijven:

int[] getallen = { 3, 8, 1, 4 };

for (int i = 0; i < getallen.Length; i++)
{
    Console.WriteLine(getallen[i]);
}

Beide lussen doen exact hetzelfde, maar de foreach-versie is korter en leesbaarder. Je hoeft je niet bezig te houden met de index, en je kan dus ook geen fout maken met de grenzen (bijvoorbeeld <= in plaats van <).

Wanneer gebruik je foreach?

Gebruik de foreach-lus wanneer je alle elementen wil overlopen en de index zelf niet nodig hebt. Heb je de positie wel nodig (bijvoorbeeld “toon het 3de element” of “vergelijk element i met element i+1”), dan blijf je beter bij de for-lus.

Belangrijke beperking. Met een foreach-lus kan je de elementen alleen uitlezen, niet wijzigen. De variabele in de lus (getal in het voorbeeld) is een kopie van het element. Als je die kopie aanpast, verandert de array zelf niet. Wil je de inhoud van een array écht aanpassen, dan moet je dat doen via de index, met een for-lus: getallen[i] = ....