Proszę sprawdzić podany kodCzy Nullable DateTime działa poprawnie?
DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
Zwraca String.Empty
.
Czy to prawda?
Może będzie lepiej rosnąć wyjątek w drugim wierszu kodu
Proszę sprawdzić podany kodCzy Nullable DateTime działa poprawnie?
DateTime? tmp = new DateTime();
tmp = null;
return tmp.ToString();
Zwraca String.Empty
.
Czy to prawda?
Może będzie lepiej rosnąć wyjątek w drugim wierszu kodu
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>.GetType
robi 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
).
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 –
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