2010-12-28 10 views

Odpowiedz

17

Tak, to jest prawidłowe. Z reprezentacją documentation

tekście wartości bieżącej Nullable<T> obiektu, jeżeli nieruchomość HasValue jest prawdziwe, lub pusty ciąg ("") jeżeli nieruchomość HasValue jest fałszywe.

Należy również zauważyć, że Nullable<T>.Equals i Nullable<T>.GetHashCode nie rzucać się w tym przypadku, ale że Nullable<T>.GetTyperobi rzut. Dzieje się tak dlatego, że Object.Equals, Object.GetHashCode i Object.ToString są nadpisywane dla Nullable<T>, ale Object.GetType nie jest (ponieważ nie może być taki, jak nie jest oznaczony jako virtual).

+0

ok, dziękuję za odpowiedź. ale jak myślisz, czy to prawda? ponieważ jeśli użyjesz String tmp = null; tmp.ToString() wzniesie wyjątek –

+0

Ponieważ typ zerowy z 'HasValue' jako false nie jest referencją' null'. Z perspektywy pojęciowej typ nullable reprezentuje typ wartości z możliwością "braku wartości". Używamy 'null' do reprezentowania, gdy brakuje wartości, ale to nie jest to samo, co odwołanie do' null'. Zauważ, że 'tmp.Value' rzuci w przypadku' tmp' będącym instancją typu zerowego z 'HasValue' jako false. Brak tej wartości, więc próba uzyskania tej wartości powinna i powinna zostać odpowiednio wykonana. – jason