L’operatore ?? è detto operatore di null coalescing, ed è molto utile in una serie di situazioni permettendo di scrivere codice più elegante e ristretto in C#.
Quante volte vi è capitato di dover scrivere un blocco if per controllare se una variabile è null, ed agire di conseguenza scegliendo un valore di default da assegnare alla stessa variabile? Ecco un esempio:
string name;
if(str!=null)
{
name=str;
}
else name="senza nome";
Probabilmente starete pensando: “beh c’è sempre l’operatore ternario!”, ed in effetti un altro modo di scrivere lo stesso blocco di codice può essere il seguente:?
string name= (str!=null) ? str: "senza titolo";<br><br>
Ma l’operatore di null coalescing, introdotto già con le specifiche 2.0 ma spesso ignorato da chi si avvicina al mondo della programmazione in C#, consente di essere ancora più concisi.
Esso verifica se l’operando a sinistra è diverso da null, ed in tal caso restituisce il valore dell’operando sinistro stesso. In caso contrario invece restituisce l’operando destro:
string name= str ?? "senza titolo";
L’operatore funziona anche con tipi valore, per esempio nel caso seguente, se il valore della variabile nullableInt è null, viene assegnato alla variabile i il valore 1:
int? nullableInt=null; int i= nullableInt ?? 1; // i vale 1
Se invece nullableInt possiede un valore, esso viene assegnato alla variabile:
int? nullableInt=123; inti= nullableInt ?? 1; // i vale ora 123
