当 null 条件运算符短路时,它是否仍然评估方法参数?

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

空条件运算符可用于跳过空目标上的方法调用。在这种情况下,是否会评估方法参数?

例如:

myObject?.DoSomething(GetFromNetwork());

myObjectnull时是否调用GetFromNetwork

他们不会被评估。

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

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

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

这不会打印任何内容。 Resharper 将 GetSomeValue() 的评估标记为无效代码:

myObject?.Method();

基本等同于

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

您看到如果 myObjectnull,则无法计算任何参数。

请注意,如果您将 myObject 替换为