Zgadzam się, że Nullable < DateTime> jest lepszym wyborem w przypadku braku innych względów.
Należy jednak wziąć pod uwagę inne systemy, z którymi należy współpracować.
Na przykład:
jeśli wystawiania .NET DateTime do klientów COM, nie będzie w stanie wykorzystać Nullable < DateTime>.
jeśli przechowujesz wartość w bazie danych SQL Server, pamiętaj, że SQL Server nie może przechowywać DateTime.MinValue jako DateTime.
Inną kwestią do rozważenia jest to, że Nullable można dodać trochę złożoności dla dzwoniących z API: mogą wziąć pod uwagę w jaki sposób sprawa zerowy powinien być traktowany. W niektórych przypadkach może być łatwiejsze użycie wartości domyślnej dla przypadku zerowego. Na przykład rozważ klasę, która udostępnia właściwość "Data wygaśnięcia", gdzie wymagana jest wartość wskazująca, że element nigdy nie wygasa.
Jednym ze sposobów jest użycie Nullable<DateTime>
z wartością null oznaczającą "never expires". Alternatywnym podejściem jest użycie standardowego DateTime z DateTime.MaxValue
reprezentującego "nigdy nie wygasa".
W tym przykładzie test „jest przedawniony” jest prostsze dla standardowej DateTime:
if (item.ExpiryDate <= DateTime.Today) ...
niż dla Nullable<DateTime>
:
if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...
Albo powinien TimeLastAccessed przez zestaw do TimeCreated gdy obiekt jest początkowo stworzony – benPearce