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

Когда этот код заканчивается, каков результат myObject?

object myObject = "something";
object yourObject = null;

myObject = null ?? yourObject;

3 ответа

Решение

myObject будет нулевым

Это переводится на -

if (null == null)
    myObject = yourObject;
else
    myObject = null;

Оператор coalesce переводится так:

x ?? y
x != null ? x : y

Поэтому то, что у вас есть:

myObject = null != null ? null : yourObject;

Что на самом деле довольно бессмысленно, поскольку ноль всегда будет нулевым.

Просто для удовольствия, вот небольшой стол:

A?? B -> R
---------------------?? любой -> а; где не ноль
ноль?? б -> б; для любого б
ноль?? нуль -> ноль; подразумевается из предыдущего

И с тех пор ?? просто (сюрприз!) связанный с правами инфиксный оператор, x ?? y ?? z -> x ?? (y ?? z), подобно && а также ||, ?? также операция короткого замыкания.

... из ?? Оператор (C# Reference):

Он (??) возвращает левый операнд, если он не равен нулю; в противном случае он возвращает правильный операнд.

... из ссылки на язык C# 3.0:

Нулевое коалесцирующее выражение формы b требует, чтобы a был обнуляемого типа или ссылочного типа. Если a не нуль, результат a?? б является; в противном случае результат b. Операция оценивает b, только если a является нулем.

Другие вопросы по тегам