2009-07-29 7 views
7

Je me demandais - quand voudrais-je utiliser le membre .Value sur un type nullable au lieu de simplement appeler la variable elle-même?Types de variables nullable - membre .value

par exemple

bool? b = vrai;

Pourquoi utiliser b.Value pour obtenir la valeur au lieu de simplement utiliser b? Quel avantage ou fonction l'appel .Value ajoute-t-il?

Répondre

13

La propriété value est en lecture seule et renvoie le type de valeur réelle. La propriété value ne peut jamais être nulle.

Si vous prévoyez d'obtenir une valeur NULL, renvoyer une valeur, puis vérifiez .HasValue, puis faites référence à Value. Par exemple, si vous souhaitez affecter la valeur d'un Nullable à un bool ordinaire, alors vous devez faire référence à sa valeur:

bool? nullableBool = null; 

if (nullableBool.HasValue) 
{ 
    bool realBool = nullableBool.Value; 
} 

Cependant, la suivante ne sera pas compilation:

bool? nullableBool = true; 
bool realBool = nullableBool; // Won't work 
+0

Super! Ça a du sens. Merci beaucoup :)) – Valerie

3

.Value renvoie un bool plutôt qu'une bool? ce qui vous permettra de l'utiliser comme un paramètre pour les fonctions qui ne s'attendent pas à des types Nullable.

1

La seule différence est qu'ils sont 2 types différents. Si vous avez un bool? alors c'est un type nullable de bool.

Si vous appelez b.Value vous êtes en train de retourner un bool et non un bool?.

Subtile, mais lorsque vous avez besoin de la version non nullable de l'objet, utilisez la propriété .Value.

+0

Typo . Suttle = subtile. –

1

Pour moi, c'est la valeur pas tant que l'est la propriété « HasValue » que je trouve utile

2

Lorsque vous souhaitez utiliser des méthodes/propriétés du type sous-jacent. Ne s'applique pas vraiment à bool. Permettez-moi d'illustrer avec DateTime:

DateTime? d; 
int month = d.Value.Month; 

Vous ne pouvez pas accéder à la propriété par mois directement à partir d, parce que DateTime? n'a pas cette propriété.

Questions connexes