Я согласен, что Nullable - лучший выбор при отсутствии других соображений.
Однако вам необходимо рассмотреть другие системы, с которыми вам нужно взаимодействовать.
Например:
если вы выставляете ваш .NET DateTime для COM-клиентов, вы не сможете использовать Nullable .
если вы храните значение в базе данных SQL Server, помните, что SQL Server не может хранить DateTime.MinValue в качестве DateTime.
Еще один момент, на который следует обратить внимание, заключается в том, что Nullable может добавить некоторую сложность для вызывающих API: им, возможно, придется подумать, как обрабатывать нулевой регистр. В некоторых случаях может проще использовать значение по умолчанию для нулевого регистра. Например, рассмотрим класс, который предоставляет свойство «ExpiryDate», где необходимо указать значение, указывающее, что срок действия элемента никогда не истекает.
Один из подходов заключается в использовании Nullable<DateTime>
с нулевым значением, обозначающим «никогда не истекает». Альтернативный подход заключается в использовании стандартного DateTime с DateTime.MaxValue
, представляющим «никогда не истекает».
В этом примере тест для "истек" проще для стандартного DateTime:
if (item.ExpiryDate <= DateTime.Today) ...
чем для Nullable<DateTime>
:
if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...