Does C# 6 Elvis operator (null propagation) short circuit

3.3k views Asked by At

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...

1

There are 1 answers

2
Mark Brackett On BEST ANSWER

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

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