Home Artikelen ?? operator

04

Aug

2007

?? operator

Wat doet deze operator precies?

De operator retourneert de left-hand als deze niet null is, als dit wel het geval is dan retourneert hij de right-hand. Dit houdt ook in dat deze operator alleen gebruikt kan worden met nullable types. Zodra je deze gebruikt bij een niet nullable type zal je de compile error Compiler Error CS0019 om je oren krijgen.

Even een code voorbeeld om de werking van de ?? operator te verduidelijken:

int? a;
int b = a ?? 100;

Hier zal variable b dus geinitializeerd worden met de waarde 100.
Dit komt omdat variable a een null waarde bevat en de ?? operator zal dus de right-hand retourneren.

int? a = 1;
int b = a ?? 100;

Hier zal variable b dus geinitializeerd worden met de waarde 1.
Dit komt omdat variable a geen null waarde bevat maar de integere waarde 1 en zal deze dus geretourneerd worden.

Als dit nog niet duidelijk genoeg is, hier een code voorbeeld die hetzelfde doet op 3 verschillende manieren:

int? a = null;
int b;
 
// If construction
if( a.HasValue )
{
    b = a.Value;
}
else
{
    b = 100;
}
 
// ?: operator
b = ( a.HasValue ? a.Value : 100 );
 
// ?? operator
b = a ?? 100;

Alle drie de methodes hebben hetzelfde resultaat, alleen de ?? operator is wat mij betreft een stuk leesbaarder!

Performance winst!

Niet alleen de leesbaarheid gaat vooruit, maar het kan ook performance winst opleveren. In de vorige code voorbeelden is a een variable. Maar wat nu als we a vervangen door een complexe tijdrovende method?

In het geval van de if constructie zal de method twee keer uitgevoerd worden als de return waarde niet null is. Bij de ?: operator is dit ook het geval.
Je kunt dit oplossen door de return waarde van de complexe tijdrovende method eerst in een variable te stoppen en deze variable te controleren en verder te gebruiken.
Maar bij de ?? operator is dit niet nodig!

Bij de ?? operator word de left-hand maar 1 keer uitgelezen en de return waarde word vast gehouden. Als deze niet null is zal de left-hand niet nogmaal bekeken worden, maar de vast gehouden return waarde van de left-hand zal geretourneerd worden.

In het kort

Reden genoeg dus om de ?? operator te gebruiken! Maar hier heb je alles nog even op een rijtje:

  • Leesbaarder dan de ?: operator
  • Leesbaarder dan een if-else constructie
  • Performance, left-side word maar 1 keer bekeken

Trackback(0)
Commentaar (0)Add Comment

Schrijf commentaar
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
smaller | bigger

busy
 

Quote XNA presentatie

Bedankt voor je schitterende presentatie. Ik heb niets dan positieve geluiden gehoord.

Peter Criellaard
Microsoft

Quote Coding dilemma's

Eindelijk een presentatie waarmee ik ook iets mee kan in de praktijk!

Dennis Schuuring
Max BV

Quote C# fun!

Bedankt voor de presentatie, het was voor mij 1 van de betere momenten van die dag!

Henri Koppen
Arcenus