Каково значение по умолчанию типа nullable "int?" (включая знак вопроса)?
В С#, каково значение по умолчанию переменной экземпляра класса типа int?
?
Например, в следующем коде какое значение будет MyNullableInt
, если оно никогда не назначено явно?
class MyClass
{
public int? MyNullableInt;
}
(Кажется вероятным, что ответ почти наверняка будет либо null
, либо 0
, но какой из них он?)
Ответы
Ответ 1
Значение по умолчанию для int?
- и для любого типа с нулевым значением, использующего тип? объявление - null
.
Почему это так:
-
int?
является синтаксическим сахаром для типа Nullable <T> (где T является int
), структурой. (ссылка)
- Тип
Nullable<T>
имеет элемент bool HasValue, который, когда false
, делает экземпляр Nullable<T>
действительным, как "a null
. В частности, метод Nullable <T> .Equals отменяется для возврата true
, когда значение Nullable<T>
с HasValue == false
сравнивается с фактическим значением null
.
- Из С# Language Specification 11.3.4 начальное значение по умолчанию для экземпляра структуры - это все поля типа типа структуры, установленные по умолчанию, и все это поля типа ссылочной структуры, установленные на
null
.
- Значение по умолчанию для переменной
bool
в С# равно false
(ссылка). Следовательно, свойство HasValue
экземпляра Nullable<T>
по умолчанию false
; что, в свою очередь, делает сам экземпляр Nullable<T>
, как null
.
Ответ 2
Мне было важно поделиться методом Nullable<T>.GetValueOrDefault()
, который особенно удобен при работе с математическими вычислениями, использующими значения Nullable<int>
aka int?
. Существует много раз, когда вам не нужно проверять свойство HasValue
, и вы можете просто использовать GetValueOrDefault()
вместо этого.
var defaultValueOfNullableInt = default(int?);
Console.WriteLine("defaultValueOfNullableInt == {0}", (defaultValueOfNullableInt == null) ? "null" : defaultValueOfNullableInt.ToString());
var defaultValueOfInt = default(int);
Console.WriteLine("defaultValueOfInt == {0}", defaultValueOfInt);
Console.WriteLine("defaultValueOfNullableInt.GetValueOrDefault == {0}", defaultValueOfNullableInt.GetValueOrDefault());
![Командная строка с показанным выше кодом]()
Ответ 3
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());