Побочные эффекты, короткое замыкание и нулевой распространяющийся оператор вызова метода (?.) - PullRequest
0 голосов
/ 27 июня 2018

Если целевой объект является нулевым в условном доступе к члену / операторе распространения нулевого значения, а член является методом, оцениваются ли аргументы метода?

То есть, в следующем коде g() называется?

SomeClass x = null;
x?.Foo(g());

Как насчет h() в:

SomeClass x = null;
x?.Bar($"h = {h()}");

SharpLab помещает оценку аргумента в блок if, поэтому он будет пропущен. Но гарантируется ли это спецификацией или подробностями реализации?

1 Ответ

0 голосов
/ 27 июня 2018

Хотя вы могли бы легко попробовать, если или нет g выполняется, вот объяснение, почему. нулевой условный оператор - это просто ярлык для простой проверки null:

"[Нулевой условный оператор] Проверяет значение левой руки операнд для null перед выполнением доступа к элементу (?.) или индекса (?[]) операция; возвращает null, если левый операнд оценивается как null. "

Таким образом, ваш код эквивалентен следующему:

if(x != null)
{
    x.Foo(g());
}
...