Подтвердить что ты не робот

Каково значение по умолчанию типа nullable "int?" (включая знак вопроса)?

В С#, каково значение по умолчанию переменной экземпляра класса типа int??

Например, в следующем коде какое значение будет MyNullableInt, если оно никогда не назначено явно?

class MyClass
{
    public int? MyNullableInt;
}

(Кажется вероятным, что ответ почти наверняка будет либо null, либо 0, но какой из них он?)

4b9b3361

Ответ 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());