boot4life
boot4life

Reputation: 5324

When the null conditional operator short-circuits, does it still evaluate method arguments?

The null conditional operator can be used to skip method calls on a null target. Would the method arguments be evaluated or not in that case?

For example:

myObject?.DoSomething(GetFromNetwork());

Is GetFromNetwork called when myObject is null?

Upvotes: 7

Views: 570

Answers (2)

adjan
adjan

Reputation: 13684

myObject?.Method();

is basically equivalent to

var temp = myObject;
if (temp != null) {
    temp.Method();
}

You see that no argument can be evaluated if myObject is null.

Note that if you replaced myObject by

Upvotes: 0

boot4life
boot4life

Reputation: 5324

They will not be evaluated.

class C
{
    public void Method(int x)
    {
        Console.WriteLine("Method");
    }
}

static int GetSomeValue()
{
    Console.WriteLine("GetSomeValue");
    return 0;
}

C c = null;
c?.Method(GetSomeValue());

This does not print anything. Resharper marks the evaluation of GetSomeValue()as dead code:

enter image description here

Upvotes: 10

Related Questions