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";
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;
int i= nullableInt ?? 1; // i vale ora 123
cc8cabf5-78c3-491b-a003-9362b87938b5|1|5.0|c3d67be3-8bc8-482b-8d1a-630689929ed2