3

Why this c# code throws a null exception?

bool boolResult = SomeClass?.NullableProperty.ItsOkProperty ?? false;

Isn´t elvis operator supposed to stop evaluation (short circuit) once the NullableProperty evaluates to null?

In my understanding the line of code above is a shortcut for:

bool boolResult 
if(SomeClass != null)
    if(SomeClass.NullableProperty != null)
        boolResult = SomeClass.NullableProperty.ItsOkProperty;
    else
        boolResult = false;
else
    boolResult = false;

Did I assume wrong?

EDIT: Now I understand why I get it wrong, The line of code actually translates to something similar to:

bool boolResult 
if(SomeClass != null)
    boolResult = SomeClass.NullableProperty.ItsOkProperty;
else
    boolResult = false;

And throws because NullableProperty is null...

Paulo Morgado
  • 12,698
  • 3
  • 27
  • 55
Marcelo de Aguiar
  • 1,412
  • 12
  • 30
  • Ah, I think what you wanted was `SomeClass?.NullableProperty?.ItsOkProperty` –  Jun 10 '15 at 19:08

1 Answers1

9

You need to chain, since the NRE is on the second reference:

bool boolResult = SomeClass?.NullableProperty?.ItsOkProperty ?? false;
Mark Brackett
  • 83,256
  • 17
  • 104
  • 152