Лучше использовать DateTime. MinValue или nullable DateTime?

Если у меня был DateTime на классе под названием "TimeLastAccessed", был бы он иметь больше смысла для этого DateTime быть nullable:

public DateTime? TimeLastAccessed { get; set }

if (TimeLastAccessed == null) // ... handle it

к указать на это никогда не получали доступ или проверка на DateTime. MinValue

public DateTime TimeLastAccessed { get; set; }

if (TimeLastAccessed == DateTime.MinValue) // ... handle it

?

11
задан Kermit 27 January 2010 в 03:58
поделиться

3 ответа

Это имеет смысл использовать Nullable. Это идея Nullable - чтобы выразить, что тип значения не имеет допустимого значения. Использовать Minvalue - это патч для случаев, которые вы не отнурительны.

12
ответ дан 3 December 2019 в 06:46
поделиться

Как может что-то, что существует никогда не доступно? Ваше недвижимость действительно что-то список lastaccessdatebycustomerOlient?

И в вашем случае я думаю, что вы хотите ... hasvalue вместо == NULL в вашем тесте. Если вы собираетесь использовать класс, используйте его функции в полной мере. Это, вероятно, компилируется почти в тот же код, но ...

0
ответ дан 3 December 2019 в 06:46
поделиться

Я согласен, что значение Nullable - лучший выбор, если не учитывать других соображений.

Однако вам необходимо рассмотреть другие системы, с которыми вам необходимо взаимодействовать.

Например:

  • если вы открываете .NET DateTime для клиентов COM, вы не сможете использовать Nullable .

  • если вы сохраняете значение в базе данных SQL Server, помните, что SQL Server не может хранить DateTime.MinValue как DateTime.

Еще один момент, который следует учитывать, заключается в том, что Nullable может добавить некоторую сложность для вызывающих API: им может потребоваться рассмотреть, как следует обрабатывать нулевой случай. В некоторых случаях может быть проще использовать значение по умолчанию для нулевого случая. Например, рассмотрим класс, который предоставляет свойство «ExpiryDate», где требуется значение, указывающее, что срок действия элемента никогда не истекает.

Один из подходов заключается в использовании Nullable с нулевым значением, представляющим «никогда не истекает». Альтернативный подход - использовать стандартный DateTime с DateTime.MaxValue , представляющим «никогда не истекает».

В этом примере проверка на «истек» проще для стандартного DateTime:

if (item.ExpiryDate <= DateTime.Today) ...

, чем для Nullable :

if (item.ExpiryDate.HasValue && item.ExpiryDate <= DateTime.Today) ...
6
ответ дан 3 December 2019 в 06:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: