C# fornisce costrutti di controllo del flusso standard — condizionali (, ), cicli (, , ) e diramazioni (, , ) — oltre a miglioramenti moderni come le espressioni switch e il pattern matching che rendono il codice più conciso.
C# fornisce costrutti di controllo del flusso standard — condizionali (, ), cicli (, , ) e diramazioni (, , ) — oltre a miglioramenti moderni come le espressioni switch e il pattern matching che rendono il codice più conciso.
ifswitchforforeachwhilebreakcontinuereturnif (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",
};
La moderna switch expression è concisa (restituisce un valore, nessun break), e supporta il potente pattern matching (matching di tipi, condizioni e altro) — un miglioramento significativo rispetto allo switch tradizionale verboso.
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 (iterare qualsiasi IEnumerable) è il ciclo idiomatico per le collezioni.
foreach (var item in items)
{
if (item.Skip) continue; // next iteration
if (item.Stop) break; // exit loop
}
return result; // exit method
Il controllo del flusso è il meccanismo fondamentale per esprimere la logica in ogni programma, quindi comprendere i costrutti di C# è una conoscenza fondamentale quotidiana.
Mentre i fondamenti sono standard, i miglioramenti moderni di C# meritano di essere conosciuti e utilizzati: la switch expression (C# 8+) è un miglioramento significativo rispetto allo switch tradizionale — concisa, che restituisce un valore, senza bug di fall-through (nessun break dimenticato), e supportando il pattern matching (matching su tipi, condizioni, valori e struttura), che rende la logica condizionale complessa molto più pulita rispetto a catene annidate di if-else.
Gli operatori null-coalescing (??, ??=) forniscono una gestione pulita dei null, e foreach è il modo idiomatico per iterare le collezioni.
Conoscere questi costrutti e preferire le forme moderne e più espressive (switch expressions con pattern matching rispetto a switch statement verbosi, null-coalescing per i valori predefiniti) è una conoscenza quotidiana per scrivere C# pulito e idiomatico.
La switch expression e il pattern matching in particolare riflettono l'evoluzione di C# moderno verso codice più funzionale e conciso, rendendoli importanti da comprendere sia per scrivere codice migliore che per leggere codebase C# attuali che utilizzano estesamente queste funzionalità.