En C #, quelle est la valeur par défaut d’une variable d’instance de classe de type int?
?
Par exemple, dans le code suivant, quelle valeur aura MyNullableInt
s'il n'est jamais explicitement attribué?
class MyClass
{
public int? MyNullableInt;
}
(Il semble probable que la réponse est presque certainement soit null
ou 0
, mais de qui s'agit-il?)
La valeur par défaut pour int?
- et pour tout type Nullable qui utilise le "type?" déclaration - est null
.
Pourquoi c'est le cas:
int?
est un sucre syntaxique pour le type Nullable <T> (où T est int
), une structure. ( référence )Nullable<T>
type a un membre bool HasValue , qui, lorsque false
, rend le Nullable<T>
instance "agit comme" une valeur de null
. En particulier, la méthode Nullable <T> .Equals est substituée pour renvoyer true
lorsqu’un Nullable<T>
avec HasValue == false
est comparé à une valeur réelle de null
.null
.bool
dans C # est false
( référence ). Par conséquent, la propriété HasValue
d’une valeur par défaut Nullable<T>
instance est false
; ce qui fait que Nullable<T>
_ instance elle-même agit comme null
.Je me suis senti important de partager la méthode Nullable<T>.GetValueOrDefault()
, qui est particulièrement utile lorsque vous travaillez avec des calculs mathématiques qui utilisent les valeurs Nullable<int>
Ou int?
. Il arrive souvent que vous n'ayez pas à vérifier la propriété HasValue
et que vous puissiez simplement utiliser GetValueOrDefault()
à la place.
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());
var x = default (int?);
Console.WriteLine("x == {0}", (x == null) ? "null" : x.ToString());