Как проверить значение DateTime по умолчанию?
Мне нужно проверить значение DateTime
, если оно имеет значение или нет.
У меня есть несколько вариантов:
if (dateTime == default(DateTime))
или
if (dateTime == DateTime.MinValue)
или используя значение с нулевым значением DateTime?
if (nullableDateTime.HasValue)
Лично я предпочел бы третью версию, так как ее довольно хорошо читаем.
Но в нашей базе данных есть несколько столбцов datetime, которые определены как не равные нулю.
Поэтому в некоторых случаях я должен использовать первые два варианта.
Я где-то читал, что ключевое слово default
должно использоваться при работе с дженериками, но разве это не является более читаемым в этом случае? При использовании второго варианта я должен знать, что значением по умолчанию для нового и пустого экземпляра DateTime является DateTime.MinValue, у которого есть запах детали реализации для меня.
Итак, какой вариант использовать для использования "лучшей практики"?
Ответы
Ответ 1
Я бы предположил, что это действительно явное:
// Or private, or maybe even public
internal static readonly DateTime MagicValueForNullDateTimeInNonNullableColumns
= DateTime.MinValue;
Хорошо, поэтому я бы назвал это имя немного менее многословным, но вы понимаете, что я имею в виду. На самом деле не имеет большого значения, как вы инициализируете это значение - это ясно, что вы пытаетесь сделать.
(Конечно, используйте тип с нулевым значением в любое время. Я предполагаю, что вопрос задан, потому что вы не могли сделать это в определенных ситуациях.)
Ответ 2
Мне нужно проверить значение DateTime
, если оно имеет значение или нет.
Вы довольно подробно описали ситуацию с учебником, требующую Nullable<DateTime>
. Я бы пошел с этим вариантом.
(Вам, очевидно, понадобится какой-то слой перевода, если вам нужно сохранить значения в столбце с нулевым db, но я бы постарался сохранить любое "магическое" значение как можно ближе к db, и попробуйте сохранить код С# чистым и идиоматичным.)
Ответ 3
"Лучшая" практика будет использовать значение с нулевым значением DateTime
. Неверные типы значений были созданы именно по этой причине, не доверяя "магическим" номерам.
Что самое важное в этом подходе - это его намерение - что это означает, что в вашем контексте есть дата/время по умолчанию?
Ответ 4
Возможно, вы можете установить значение по умолчанию в своей базе данных с помощью getdate(), а затем обновить все нулевые значения до минимального значения или того, что вам нравится. По крайней мере, у вас будет одно условие