Drop links or images here to add them to the editor.

Soms wil je één variabele vergelijken met een hele reeks vaste waarden, en voor elke waarde iets anders doen. Met de if/else if-keuzes die je al kent, kan dat, maar de code wordt al snel onoverzichtelijk.

Het probleem: een lange keten van keuzes

Stel: een groep vrienden gaat samen op stap en krijgt korting volgens hoeveel ze met zijn allen zijn. We vragen het aantal op en bepalen de korting:

Met losse keuzes geschreven, en netjes in een else if-keten gegoten om te vermijden dat élke voorwaarde getest wordt, ziet dat er zo uit:

int aantal;
Console.Write("Met hoeveel zijn jullie? ");
aantal = Convert.ToInt32(Console.ReadLine());

if (aantal == 1 || aantal == 2)
{
    Console.WriteLine("Helaas, je krijgt geen korting");
}
else if (aantal == 3)
{
    Console.WriteLine("Jullie krijgen 10% korting");
}
else if (aantal == 4)
{
    Console.WriteLine("Jullie krijgen 20% korting");
}
else
{
    Console.WriteLine("Jullie mogen gratis binnen");
}

Dat werkt, maar de naam aantal wordt telkens opnieuw herhaald, en bij veel gevallen verlies je het overzicht. Voor net dit soort situaties — één variabele die je met een rij vaste waarden vergelijkt — bestaat er een duidelijker alternatief: het switch-statement.

De switch-structuur

In een switch schrijf je de variabele maar één keer. Daaronder som je per case op welke waarde je verwacht en wat er dan moet gebeuren. Hetzelfde voorbeeld als switch:

int aantal;
Console.Write("Met hoeveel zijn jullie? ");
aantal = Convert.ToInt32(Console.ReadLine());

switch (aantal)
{
    case 1:
    case 2:
        Console.WriteLine("Helaas, je krijgt geen korting");
        break;

    case 3:
        Console.WriteLine("Jullie krijgen 10% korting");
        break;

    case 4:
        Console.WriteLine("Jullie krijgen 20% korting");
        break;

    case 5:
        Console.WriteLine("Jullie krijgen 50% korting");
        break;

    default:
        Console.WriteLine("Jullie mogen gratis binnen");
        break;
}

De onderdelen op een rij

OnderdeelBetekenis
switch (aantal)De variabele die je controleert. Je schrijft ze hier maar één keer.
case 3:Een waarde om mee te vergelijken. Is aantal gelijk aan 3, dan voert C# de code onder deze case uit.
break;Stopt het switch-statement. Zodra een gelijkheid gevonden is, heeft het geen zin nog verder te zoeken.
default:Vangt alle overige gevallen op: wanneer geen enkele case past, of de waarde ontbreekt. Vergelijkbaar met de laatste else.

Let op deze twee dingen

Meerdere gevallen samen. Wil je voor verschillende waarden hetzelfde doen, dan stapel je de case-labels gewoon boven elkaar zonder er code tussen te zetten. In het voorbeeld delen case 1: en case 2: zo dezelfde regel: bij 1 of 2 personen krijg je geen korting.

Vergeet de break; niet. Elke case (en de default) sluit je af met break;. Die instructie onderbreekt de verdere verwerking: zodra C# een gelijkheid ontdekt, heeft het geen zin om de volgende case-waarden nog te testen. Daardoor loopt je programma ook iets efficiënter.

Een switch is dus geen vervanger voor élke keuze: je gebruikt het wanneer je één variabele met een rij vaste waarden vergelijkt (zoals een aantal, een menukeuze of een maandnaam). Moet je een bereik testen (leeftijd < 5) of meerdere variabelen combineren, dan blijft de if/else if-keten de juiste keuze.