Для простого оператора объявления переменной здесь:
int? a = default;
default
всегда является значением по умолчанию типа, которому назначена переменная. Поскольку вы явно объявили, что a
имеет тип int?
, default
будет равен default(int?)
.
Нулевое слияние (??
) типа значения со значением NULL будет пытаться вернутьтип с ненулевым значением (типичная структура, в данном случае int
).
Поэтому в этом примере:
a = foo?.Bar ?? default;
default
будет равно default(int)
какон пытается вернуть объект int
через оператор.
И в этом примере:
a = foo?.Bar ?? default(int?);
, поскольку default(int?)
возвращает объект типа int?
, он либо принудительно применяетлевая рука должна быть приведена к int?
, или int?
приведена к int
. Поскольку int
неявно приводится к int?
, оператор слияния NULL рассмотрит возвращение int?
в этом случае.