Примечание для будущих посетителей: этот вопрос был основан на ошибочном коде воспроизведения. Оператор ?.
действительно делает короткое замыкание. Теперь вы можете закрыть эту вкладку браузера.
В Интернете есть много источников, утверждающих, что условный оператор null (?.
) приводит к короткому замыканию (например, http://www.informit.com/articles/article.aspx?p=2421572, выполните поиск по запросу "схема"). Я не могу обнаружить ничего подобного:
static void Main()
{
var c = new C();
Console.WriteLine(c?.Inner?.Inner); //does not rely on short circuiting, works
Console.WriteLine(c?.Inner.Inner); //throws NullReferenceException
}
class C
{
public C Inner;
}
Здесь первая строка работает из-за второй ?.
. Второй ?.
увидел null в качестве своего первого операнда и, следовательно, также вернул null. Это не короткое замыкание.
Судя по всему, остальная часть цепочки выполняется, даже если сработал нулевой регистр. Цепочка не обрывается. Для меня короткое замыкание означает, что цепочка прервана. MSDN утверждает, что это так, но пример кода не демонстрирует краткое схема:
//The last example demonstrates that the null-condition operators are short-circuiting
int? count = customers?[0]?.Orders?.Count();
// null if customers, the first customer, or Orders is null
Изменялось ли когда-либо это поведение в течение цикла разработки C# 6? Это объясняет плохие источники в сети. И почему так много говорят о коротком замыкании, если его нет? Возможно, я что-то не так понял.
Это не дубликат, потому что речь идет о короткое замыкание у оператора или нет (ответ: нет, хотя в принятом ответе об этом не говорится). Этот кандидат касается логических значений, допускающих значение NULL, и других несвязанный.
//does not rely on short circuiting, works
основана на коротком замыкании. - person Ivan Stoev   schedule 24.06.2016.Inner
. Это демонстрирует SC:c.Inner?.Inner.Inner
. - person boot4life   schedule 24.06.2016