Villkor, switch och ternär operator
↑Exemplen är oberoende C#-utdrag för moderna .NET-konsolprojekt, om inget annat anges. Klassdeklarationer och toppnivåkod kan placeras i samma Program.cs-fil, med toppnivåkoden först.
Snabböversikt
Section titled “Snabböversikt”Flödeskontroll avgör vilka satser som körs. Välj den enklaste konstruktionen som tydligt uttrycker reglerna.
Så fungerar det
Section titled “Så fungerar det”If, else if och else
Section titled “If, else if och else”if kontrollerar ett booleskt uttryck. else if testas om tidigare villkor var falska. Ett avslutande else hanterar resten. Ordningen spelar roll om villkoren överlappar.
int score = 82;if (score >= 90) Console.WriteLine("Excellent");else if (score >= 60) Console.WriteLine("Passed");else Console.WriteLine("Try again");Switch-satser
Section titled “Switch-satser”switch passar när ett värde avgör flera olika fall. Mönstermatchning och vakter finns också, men en vanlig switch är ofta tydligast för menyval.
string command = "start";switch (command){ case "start": Console.WriteLine("Running"); break; case "stop": Console.WriteLine("Stopped"); break; default: Console.WriteLine("Unknown command"); break;}Ternär operator och switch-uttryck
Section titled “Ternär operator och switch-uttryck”Villkorsoperatorn villkor ? ja : nej returnerar ett av två uttryck. Använd den för korta tilldelningar, inte djupa nästlade regler. Ett switch-uttryck kan ge ett värde från flera fall.
int health = 0;string state = health > 0 ? "Alive" : "Defeated";string icon = state switch{ "Alive" => "+", _ => "x"};Console.WriteLine($"{state} {icon}");Fördjupning: varje gren uttrycker ett designbeslut
Section titled “Fördjupning: varje gren uttrycker ett designbeslut”Villkor testas i ordning
Section titled “Villkor testas i ordning”En kedja med if/else if/else kontrollerar grenarna uppifrån och ned. Den första sanna grenen körs och resten hoppas över. Ordningen är därför viktig när regler överlappar. Om score >= 90 ska ge högsta betyg måste det testas före score >= 60. Ta med ett avslutande else när oväntade värden måste hanteras.
switch när ett värde bestämmer handlingen
Section titled “switch när ett värde bestämmer handlingen”En switch-sats beskriver olika fall för ett givet värde. Ett switch-uttryck beräknar i stället ett värde och kan vara tydligare än att tilldela samma variabel i många grenar. Om alla enumvärden spelar roll bör du avgöra vad som ska hända för okända värden i stället för att tyst ignorera dem.
int score = 85;string rank = score switch{ >= 90 => "Gold", >= 60 => "Silver", >= 0 => "Bronze", _ => "Invalid score"};Console.WriteLine(rank); // SilverExemplet använder relationsmönster. Grenarna matchas i ordning. Om de två första byter plats får även 95 poäng felaktigt nivån Silver.
Ternär operator eller vanlig if?
Section titled “Ternär operator eller vanlig if?”condition ? whenTrue : whenFalse ger ett av två uttryck och passar en enkel tilldelning. Flera nästlade ternära operatorer blir snabbt svårlästa. Välj vanlig if eller ett switch-uttryck när reglerna blir mer komplicerade. Syftet är tydlighet, inte så få rader som möjligt.
Hantera felaktiga tillstånd medvetet
Section titled “Hantera felaktiga tillstånd medvetet”Tänk på gränsvärden som noll, negativa tal, tom indata och okända enumvärden. När data kommer från spelare, filer eller nätverk bör den kontrolleras innan tillståndet ändras. Ett avslutande _-mönster, en guard clause eller ett undantag kan visa vad som ska hända om inget förväntat fall passar.
När och varför?
Section titled “När och varför?”Använd if för intervall, switch för kända alternativ och ternär operator för enkla tvåvägsval.
Vanligt misstag
Section titled “Vanligt misstag”Kontrollera ordningen vid överlappande villkor och undvik djupt nästlade ternära uttryck.
Testa själv
Section titled “Testa själv”Skriv en regel som skriver Low under 20, Medium under 80 och annars High.
Visa ett lösningsförslag
if (value < 20) ... else if (value < 80) ... else ....
