Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of mappen te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen om mappen te wijzigen.
Tip
Dit artikel maakt deel uit van de sectie Grondbeginselen voor ontwikkelaars die al ten minste één programmeertaal kennen en C# leren. Als u nieuw bent in programmeren, begint u eerst met de Aan de slag-handleidingen. Zie selectie-instructies in de taalreferentie voor de volledige syntaxis.
Komt u uit een andere taal? C++, Java en JavaScript delen allemaal het erfgoed van C, dus ifelseen switch lees hetzelfde in C#. Het enige verschil dat het vermelden waard is: C# verbiedt fall-through tussen niet-lege switch-cases, en elk case-label kan op een patroon testen in plaats van alleen op een constante. Als u Python gewend bent, komt C#'s if/else if/else overeen met if/elif/else, en de patroongebaseerde switch van C# komt het dichtst in de buurt van Python's match-statement.
Selectie-instructies kiezen welk codeblok wordt uitgevoerd op basis van een voorwaarde. C# biedt twee: if (met een optionele else) voor vertakking op een Booleaanse waarde en switch voor het vergelijken van één waarde ten opzichte van verschillende gevallen. Een Boole-expressie is een expressie die resulteert in true of false, zoals de vergelijking temperature >= 25.
Vertakking met if en else
Een if instructie voert het blok alleen uit wanneer de Boole-expressie is true. Voeg een else blok toe om de code op te geven die wordt uitgevoerd wanneer de voorwaarde is false:
int temperature = 28;
// An if statement runs its block only when the condition is true.
// The else block runs when the condition is false.
if (temperature >= 25)
{
Console.WriteLine("Warm"); // => Warm
}
else
{
Console.WriteLine("Cool");
}
De hoofdtekst van een if of else is één instructie, zoals een toewijzing of een methodeaanroep. Een blokinstructie is zelf één instructie die nul of meer instructies tussen accolades ({ }) plaatst.
Veel coderingsstandaarden raden u aan de vertakkingen tussen accolades te zetten, zelfs voor één instructie. Accolades maken het bereik expliciet. Hiermee voorkomt u een veelgemaakte fout: later een tweede regel toevoegen waarvan u verwacht dat die voorwaardelijk wordt uitgevoerd, maar die in plaats daarvan onvoorwaardelijk wordt uitgevoerd. Alleen de accolades bepalen welke instructies deel uitmaken van de vertakking. C# beschouwt witruimte niet als van betekenis, dus alleen inspringing is dat nooit. Accolades zijn zelfs om één regel heen toegestaan: het blok is de ene instructie die in die tak wordt uitgevoerd. Spring je code in voor de leesbaarheid, maar gebruik accolades om het blok af te bakenen.
Verschillende voorwaarden testen met else if
Om tussen meer dan twee paden te kiezen, schakelt u voorwaarden aaneen met else if. C# evalueert elke voorwaarde in volgorde en voert het eerste blok uit waarvan de voorwaarde is true, en slaat vervolgens de rest over. Een laatste else verwerkt elk resterende geval:
int score = 82;
// Chain conditions with else if. The first branch whose condition is
// true runs; the compiler skips the rest.
string grade;
if (score >= 90)
{
grade = "A";
}
else if (score >= 80)
{
grade = "B";
}
else if (score >= 70)
{
grade = "C";
}
else
{
grade = "F";
}
Console.WriteLine(grade); // => B
Orde is belangrijk in een keten. Omdat de eerste overeenkomende voorwaarde wint, plaatst u eerst de meest specifieke voorwaarden. In het vorige voorbeeld zorgt het testen van score >= 80 vóór score >= 70 ervoor dat een score van 82 wordt toegewezen aan "B" in plaats van aan "C".
Een waarde koppelen aan een switch instructie
Wanneer u één waarde vergelijkt met veel afzonderlijke gevallen, wordt een switch instructie duidelijker gelezen dan een lange else if keten. Net als if is de instructie switch een vertakkingsinstructie: die bepaalt welke code wordt uitgevoerd. Elk case label bevat een overeenkomende waarde en elke case sectie eindigt met een break instructie. Groepeer labels om één gezamenlijk blok te delen en gebruik de sectie default voor waarden waarmee geen enkele case overeenkomt:
DayOfWeek day = DayOfWeek.Saturday;
// A switch statement compares one value against several case labels.
// Stacked labels share a body. Each section ends with break, and the
// default section runs when no case matches.
switch (day)
{
case DayOfWeek.Saturday:
case DayOfWeek.Sunday:
Console.WriteLine("Weekend"); // => Weekend
break;
default:
Console.WriteLine("Weekday");
break;
}
In tegenstelling tot C en Java staat C# niet toe dat de uitvoering vanuit de ene niet-lege sectie case doorloopt naar de volgende. Elke sectie die code bevat, moet eindigen met een break (of een andere jump-instructie, zoals return of goto). Deze regel voorkomt de onbedoelde fall-through-bugs die vaak voorkomen in die talen.
Testpatronen met case en when
Een case label is niet beperkt tot constante waarden. Het kan een patroon testen. Dit is een regel die de vorm of waarde van gegevens beschrijft. Een relationeel patroon zoals < 0 komt overeen met elke waarde kleiner dan nul. Voeg een when clausule toe om een extra voorwaarde te koppelen die ook true moet zijn om de case te laten overeenkomen:
int measurement = 42;
// A case label can test a pattern instead of a constant. A when clause
// adds a condition that must also be true for the case to match.
switch (measurement)
{
case < 0:
Console.WriteLine("Negative");
break;
case 0:
Console.WriteLine("Zero");
break;
case > 0 when measurement % 2 == 0:
Console.WriteLine("Positive and even"); // => Positive and even
break;
default:
Console.WriteLine("Positive and odd");
break;
}
Patroongebaseerde cases worden van boven naar beneden geëvalueerd, dus meer specifieke patronen moeten vóór algemenere patronen komen. Zie patroonkoppeling voor de volledige catalogus met patronen.
Een waarde met een expressie selecteren
De instructies if en switch bepalen welke code wordt uitgevoerd. Wanneer u in plaats daarvan een waarde moet kiezen, gebruikt u een expressie. Een expressie evalueert naar een waarde, zodat u deze overal kunt gebruiken waar een waarde wordt verwacht, zoals de rechterkant van een toewijzing of een methodeargument. C# biedt expressieformulieren die een waarde selecteren uit alternatieven zoals de voorwaardelijke operator en de switch expressie.
Voorwaardelijke operator ?:
De voorwaardelijke operator ?: kiest een van de twee waarden op basis van een Boole-voorwaarde.
Zie else voor de syntaxis, het short-circuitgedrag en richtlijnen voor wanneer u deze kiest in plaats van ?:if.
switch-expressie
Een switch expressie is de expressievariant van de switch instructie. In plaats van code uit te voeren voor het overeenkomende geval, wordt er een waarde geëvalueerd. Het is beknopter dan het toewijzen van een waarde in elke arm van een switch instructie, en de compiler waarschuwt u wanneer de armen niet alle mogelijke invoer bedekken. De switch expressie is een belangrijk onderdeel van patroonkoppeling. Als u wilt weten wanneer en hoe u dit kunt gebruiken, raadpleegt u patroonkoppeling en de switch expressiereferentie .