C# ponuja standardne kontrolne strukture toka — pogojne stavke (if, ), zanke (, , ) in razvejanja (, , ) — ter sodobna izboljšanja, kot so switch izrazi in pattern matching, ki naredijo kodo bolj jedrnato.
switchforforeachwhilebreakcontinuereturnif (score >= 90)
grade = "A";
else if (score >= 80)
grade = "B";
else
grade = "F";
// ternary and null-coalescing
string status = age >= 18 ? "adult" : "minor";
string name = input ?? "default"; // ?? — use default if input is null
name ??= "fallback"; // ??= assign if null
// traditional switch
switch (day)
{
case "Sat":
case "Sun":
type = "weekend";
break; // break required (no fall-through)
default:
type = "weekday";
break;
}
// switch EXPRESSION (C# 8) — concise, returns a value, with pattern matching
string type = day switch
{
"Sat" or "Sun" => "weekend",
_ => "weekday", // _ = default
};
// pattern matching in switch
string describe = obj switch
{
int n when n > 0 => "positive int",
string s => $"string of length {s.Length}",
null => "null",
_ => "other",
};
Sodobni switch izraz je jedrnat (vrne vrednost, brez break), in podpira zmogljive pattern matching (ujemanje tipov, pogojev in še več) — velika izboljšava v primerjavi z besedasto tradicionalno switch stavko.
for (int i = 0; i < 10; i++) { }
foreach (var item in collection) { } // iterate any IEnumerable
while (condition) { }
do { } while (condition); // runs at least once
foreach (iteracija po katerikoli IEnumerable) je idiomatska zanka za zbirke.
foreach (var item in items)
{
if (item.Skip) continue; // next iteration
if (item.Stop) break; // exit loop
}
return result; // exit method
Kontrolni tok je osnovni mehanizem za izražanje logike v vsakem programu, zato je razumevanje C# konstruktov temeljno vsakodnevno znanje.
Čeprav so osnove standardne, se sodobna C# izboljšanja izplača poznati in uporabljati: switch izraz (C# 8+) je bistvena izboljšava glede na tradicionalno switch — jedrnat, vrača vrednost, brez padca skozi (brez pozabljenega break), in podpira pattern matching (ujemanje tipov, pogojev, vrednosti in strukture), kar naredi kompleksno pogojno logiko precej čistejšo kot verižni if-else.
Null-coalescing operatorji (??, ??=) omogočajo čisto obravnavo null vrednosti, foreach pa je idiomatski način za iteracijo čez zbirke.
Znanje teh konstruktov in prednost modernim, bolj izraznim oblikam (switch izrazi s pattern matchingom namesto besedastih switch stavk, null-coalescing za privzete vrednosti) je vsakodnevno znanje za pisanje čiste, idiomatske C# kode.
Switch izraz in pattern matching posebej odsevata evolucijo sodobnega C# proti bolj funkcijski, jedrnati kodi, zato sta pomembna za razumevanje tako pri pisanju boljše kode kot pri branju trenutnih C# codebases, ki te lastnosti pogosto uporabljajo.