2009-07-29 20 views
7

Zastanawiam się - kiedy chciałbym użyć elementu .Value na typie zerowym zamiast wywoływania samej zmiennej?Typy zmienne Nullable - .value member

np ..

bool? b = prawda;

po co używać wartości b.Value, aby uzyskać wartość zamiast używać b? Jaką przewagę lub funkcję dodaje wywołanie .Value?

Odpowiedz

13

Właściwość value jest tylko do odczytu i zwraca rzeczywisty typ wartości. Właściwość value nigdy nie może mieć wartości NULL.

Jeśli spodziewasz się, że wartość zerowalna zwróci wartość, sprawdź wartość .HasValue, a następnie wartość odniesienia. Na przykład, jeśli chcesz przypisać wartość Nullable do zwykłego bool to trzeba odwołać jego wartość:

bool? nullableBool = null; 

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

Jednak po nie będzie kompilacji:

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

Świetnie! To ma sens. Wielkie dzięki :)) – Valerie

3

. Wartość zwraca bool zamiast bool? która pozwoli ci użyć go jako parametru do funkcji, które nie oczekują typów null.

1

Jedyna różnica polega na tym, że są to 2 różne typy. Jeśli masz bool to jest zerowy typ bool.

Jeśli zadzwonisz b.Value jesteś rzeczywiście powrocie do bool a nie bool?.

Subtelne, ale gdy potrzebna jest nie-nullable wersja obiektu, należy użyć właściwości .Value.

+0

Typo . Suttle = subtelny. –

1

Dla mnie to nie jest tak dużo, jak wartość jest własnością „HasValue” że znajdę przydatna

2

Kiedy chcesz użyć metod/właściwości typu bazowego. Tak naprawdę nie dotyczy boolu. Pozwól mi ilustrują DateTime:

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

Nie można uzyskać dostępu właściwość Miesiąc bezpośrednio od d, ponieważ DateTime? nie ma tej właściwości.