A null ellenőrző operátor (null-coalescing operator), azaz a „??”, a bal oldalán lévő változóra, kifejezésre, avagy operandusra, vizsgál rá, hogy annak az értéke null-e. Hogyha null, akkor a ?? jelek jobb oldalán lévő kifejezés értékét fogja visszaadni.
Példa
Természetesen, hogyha a bal oldalon lévő kifejezés nem null, a jobb oldali kifejezésünk nem kerül kiértékelésre. Ha a bal oldali értékünk null, valamint a jobb oldali értékünk is, akkor null-t kapunk eredményül.
public object Pet
{
get
{
return cat ?? dog;
}
}
Az imént említett példában a Pet tulajdonságunk (property) van egy getter blokkja, ami vagy a cat, vagy a dog mező (field) értékét adja vissza. Ha a cat mező értéke null, a macska, ha a dog mező akkor pedig a kutya értéke kerül visszaadásra.
public object Pet
{
get
{
return cat ?? dog ?? bird;
}
}
A következő példában a bird mezőt is hozzáfűztük a null ellenőrzéseinkhez. Fontos megjegyezni, hogy a kiértékelés balról jobbra halad, tehát ha a cat null, akkor a dog értékét adjuk vissza, hacsak az nem null, ha null, akkor pedig a bird értékét.
Lazy loading, avagy betöltés csak megszólításra
Természetesen van lehetőség arra is, hogy metódust, vagy esetleg egy másik tulajdonság getter blokkját írjuk a ?? operátor bal, illetve jobb oldalára. A C# programozási nyelvben gyakran szoktuk használni ezt az operátort lazy loading (betöltés kérésre) típusú betöltésre tulajdonság lekérésénél.
A következő cikkünkben részletesebben olvashatsz a Lazy Loading használatáról:
Források:
https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator