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
si elle n'est jamais explicitement attribuée?
class MyClass
{
public int? MyNullableInt;
}
(Il semble probable que la réponse soit presque certainement soit null
ou 0
, mais laquelle de ces réponses ?)
int? x;
et voir quel est le résultat?Réponses:
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 le sucre syntaxique pour le type Nullable <T> (où T estint
), une structure. ( référence )Nullable<T>
type a un membre booléen HasValue , qui, quandfalse
, faitNullable<T>
«agir» l' instance comme unenull
valeur. En particulier, la méthode Nullable <T> .Equals est remplacée pour retournertrue
quand unNullable<T>
withHasValue == false
est comparé à unenull
valeur réelle .null
.bool
variable en C # estfalse
( référence ). Par conséquent, laHasValue
propriété d'uneNullable<T>
instance par défaut estfalse
; ce qui à son tour faitNullable<T>
agir cette instance elle-mêmenull
.la source
int? x = null;
àint? x;
, j'obtiens des erreurs de compilation plus bas dans le code: "Utilisation de la variable locale x non attribuée".Field 'id' is never assigned to, and will always have its default value 0
. Bizarre n'est-ce pas?Je me suis senti important de partager la
Nullable<T>.GetValueOrDefault()
méthode qui est particulièrement pratique lorsque vous travaillez avec des calculs mathématiques utilisant des valeursNullable<int>
akaint?
. IlHasValue
arrive souvent que vous n'ayez pas à vérifier la propriété et que vous puissiez simplement l'utiliser à laGetValueOrDefault()
place.la source
la source