Каково значение по умолчанию переменной экземпляра класса типа в C # int?
?
Например, в следующем коде какое значение будет MyNullableInt
, если оно никогда не назначено явно?
class MyClass
{
public int? MyNullableInt;
}
(Кажется вероятным, что ответ почти наверняка либо null
или 0
, но какой из них?)
int? x;
и посмотреть, каков будет результат?Ответы:
Значение по умолчанию для
int?
- и для любого обнуляемого типа, который использует «тип?» декларация - естьnull
.Почему это так:
int?
является синтаксическим сахаром для типа Nullable <T> (где T - этоint
), структура. ( ссылка )Nullable<T>
Тип имеет HasValue Его элемент, который , когдаfalse
, делаетNullable<T>
экземпляр «действовать как» вnull
значение. В частности, метод Nullable <T> .Equals переопределяется для возврата,true
когдаNullable<T>
withHasValue == false
сравнивается с фактическимnull
значением.null
.bool
переменной в C # -false
( ссылка ). Следовательно,HasValue
свойствоNullable<T>
экземпляра по умолчаниюfalse
: что, в свою очередь, заставляет этотNullable<T>
экземпляр действовать какnull
.источник
int? x = null;
наint? x;
, я получаю ошибки компилятора ниже в коде: «Использование неназначенной локальной переменной x».Field 'id' is never assigned to, and will always have its default value 0
. Странно, правда?Я чувствовал , важно разделять
Nullable<T>.GetValueOrDefault()
метод , который особенно удобен при работе с математическими вычислениями , которые используютNullable<int>
акаint?
значения. Во многих случаях вам не нужно проверятьHasValue
собственность, и вы можете просто использовать ееGetValueOrDefault()
.источник
источник