当 null 条件运算符短路时,它是否仍然评估方法参数?
When the null conditional operator short-circuits, does it still evaluate method arguments?
空条件运算符可用于跳过空目标上的方法调用。在这种情况下,是否会评估方法参数?
例如:
myObject?.DoSomething(GetFromNetwork());
当myObject
为null
时是否调用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();
}
您看到如果 myObject
是 null
,则无法计算任何参数。
请注意,如果您将 myObject
替换为
空条件运算符可用于跳过空目标上的方法调用。在这种情况下,是否会评估方法参数?
例如:
myObject?.DoSomething(GetFromNetwork());
当myObject
为null
时是否调用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();
}
您看到如果 myObject
是 null
,则无法计算任何参数。
请注意,如果您将 myObject
替换为