Каков результат, если все параметры в операции объединения нулей равны нулю? - PullRequest
3 голосов
/ 19 октября 2010

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

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

myObject = null ?? yourObject;

Ответы [ 3 ]

2 голосов
/ 19 октября 2010

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

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

if (null == null)
    myObject = yourObject;
else
    myObject = null;
1 голос
/ 19 октября 2010

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

A    ?? B    -> R
---------------------
a    ?? any  -> a; where a is not-null
null ?? b    -> b; for any b
null ?? null -> null; implied from previous

А поскольку ?? - это просто (удивительно!) Инфиксный оператор, связанный с правами, x ?? y ?? z -> x ?? (y ?? z). Как и && и ||, ?? также является операцией короткого замыкания.

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

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

... из C # 3.0 Справочник по языку:

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

1 голос
/ 19 октября 2010

Оператор coalesce переводится следующим образом:

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

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

myObject = null != null ? null : yourObject;

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

...