Qu'est-ce que la valeur par défaut du type nullable “int?” (y compris la question mark)?
En C#, ce qui est la valeur par défaut d'une variable d'instance de classe de type int?
?
Par exemple, dans le code suivant, quelle est la valeur sera MyNullableInt
si elle 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 qui est-il?)
- Pourquoi le downvote? (La réponse à cette question n'était initialement pas évident pour moi sans exécuter le code pour tester le comportement; et, étonnamment, je n'arrivais pas à trouver un double de cette question sur StackOverflow, ou facilement trouvables ailleurs par l'intermédiaire de Google.)
- Vous pourriez avoir regardé ici - d'abord, google a frappé pour moi.
- J'ai trouvé cet article, lorsque je faisais des recherches -- j'ai fait lié à ma réponse ci-dessous-mais aussi loin que je peux dire, l'article n'est pas explicitement que la valeur par défaut d'un type nullable instance est null. Il ne dit "La valeur par défaut pour HasValue est faux. La Valeur de la propriété n'a pas de valeur par défaut", mais qui n'a pas directement répondu à ma question d'origine sans quelques recherches supplémentaires.
- Je me demande si c'est parce que tu pourrais juste mettre un point d'arrêt et de voir quelle en est la valeur, ou dans la Fenêtre type de
int? x;
et de voir quel sera le résultat?
Vous devez vous connecter pour publier un commentaire.
La valeur par défaut pour
int?
-- et pour tout type nullable qui utilise le type"?" déclaration -- estnull
.Pourquoi c'est le cas:
int?
est sucre syntaxique pour le type Nullable<T> (où T estint
), une structure (struct). (référence)Nullable<T>
type a un bool HasValue membre qui, lors de lafalse
, rend leNullable<T>
instance "loi comme" unnull
valeur. En particulier, la Nullable<T>.Méthode Equals est remplacée par retourtrue
lorsqu'unNullable<T>
avecHasValue == false
est comparé avec un réelnull
valeur.null
.bool
variable en C# estfalse
(référence). Par conséquent, laHasValue
propriété d'un défautNullable<T>
instance estfalse
; ce qui fait donc queNullable<T>
instance de lui-même agir commenull
.int? x = null;
àint? x;
, j'obtiens des erreurs de compilation plus bas dans le code: "l'Utilisation d'une variable locale non assignée x".Field 'id' is never assigned to, and will always have its default value 0
. Bizarre n'est-ce pas?J'ai senti qu'il était important de partager les
Nullable<T>.GetValueOrDefault()
méthode est particulièrement utile lorsque vous travaillez avec les mathématiques des calculs qui utilisentNullable<int>
akaint?
valeurs. Il y a beaucoup de moments où vous n'avez pas à vérifierHasValue
de la propriété et vous pouvez simplement utiliserGetValueOrDefault()
à la place.