Em C #, qual é o valor padrão de uma variável de instância de classe do tipo int?
?
Por exemplo, no código a seguir, qual valor terá MyNullableInt
se nunca for atribuído explicitamente?
class MyClass
{
public int? MyNullableInt;
}
(Parece provável que a resposta seja null
ou 0
, mas qual é?)
int? x;
e ver qual é o resultado?Respostas:
O valor padrão para
int?
- e para qualquer tipo anulável que usa o "tipo?" declaração - énull
.Por que este é o caso:
int?
é um açúcar sintático para o tipo Nullable <T> (onde T éint
), uma estrutura. ( referência )Nullable<T>
tipo tem um membro bool HasValue quefalse
, quando , faz com que aNullable<T>
instância "aja como" umnull
valor. Em particular, o método Nullable <T> .Equals é sobrescrito para retornartrue
quando umNullable<T>
withHasValue == false
é comparado com umnull
valor real .null
.bool
variável em C # éfalse
( referência ). Portanto, aHasValue
propriedade de umaNullable<T>
instância padrão éfalse
; que por sua vez faz com que aNullable<T>
instância em si agir comonull
.fonte
int? x = null;
paraint? x;
, recebo erros do compilador mais adiante no código: "Uso de variável local não atribuída x".Field 'id' is never assigned to, and will always have its default value 0
. Estranho, não é?Achei importante compartilhar o
Nullable<T>.GetValueOrDefault()
método que é particularmente útil ao trabalhar com cálculos matemáticos que usam valoresNullable<int>
akaint?
. Muitas vezes você não precisa verificar aHasValue
propriedade e pode apenas usarGetValueOrDefault()
.fonte
fonte