значение datetime.MinValue vs new DateTime () в C#



При получении SQL DateTime Resharper предлагает использовать new DateTime(), когда значение равно DBNull.Value. Я всегда использовал DateTime.MinValue. Каков правильный путь?



DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime();
682   6  

6 ответов:

Из документации DateTime.MinValue :

MinValue определяет дату и время, назначаемые неинициализированной переменной DateTime.

Таким образом, итоговая дата будет одинаковой. Поскольку DateTime является типом значения, оба варианта должны быть эквивалентны. Лично я предпочитаю писать DateTime.MinValue, так как это самопроверка.

PS: возможно, вы захотите рассмотреть возможность использования nullable типов (DateTime?), Если ваши данные могут содержать (значимый) null ценности.

Обычно я обрабатываю случай NULL явно. Что-то вроде этого:

if (!sqlQueryResults.IsNull("Data"))
    DoComputationDependantOnDateTime((DateTime) sqlQueryResults["Data"]);

В некоторых случаях может иметь смысл выполнять логику, даже если нет данных. В таких случаях только вы знаете, с какого значения по умолчанию начать. Вероятные кандидаты:

  • DateTime.MinValue
  • DateTime.MaxValue
  • DateTime.Now

Я бы никогда не использовал new DateTime(), так как он имеет очень плохую читаемость. Что возвращает это утверждение? Вам (и будущим разработчикам проекта), возможно, придется изучите документацию, чтобы выяснить, для чего инициализируется значение.

Я бы сказал, чтобы всегда использовать MinValue, потому что тогда вы точно знаете, какое значение в нем находится. Когда вы просто используете new DateTime (), вы инициализируете его для хранения значения, но не указываете, какое значение в него поместить. Кроме того, гораздо чище и понятнее явно вложить в него значение.

Значение по умолчанию DateTime равно DateTime.MinValue, поэтому я думаю, что не имеет значения, какой из них вы используете ;)

Нет никакого "правильного" пути. Существует соглашение, которое люди устанавливают и которому следует команда.

Дата-Время.MinValue и new DateTime () являются допустимыми определениями для null, если ответственный разработчик определяет это.

Наиболее приемлемым способом представления нулевого значения было бы использование Nullable<DateTime>, т. е. DateTime?. Таким образом, нулевое значение четко представлено как не-значение, а не магическое значение, которое нуждается в особом обращении.

(нулевое значение, конечно, тоже нуждается в особом обращении, но его гораздо труднее не заметить.)

Если вы используете магическое значение для представления нулевых значений, никакое значение не намного лучше любого другого. Вы можете использовать DateTime.MinValue или new DateTime() (которые дают тот же результат), или вы можете использовать любой произвольное значение, выходящее за пределы диапазона, используемого приложением.

Значение типа DateTime.MinValue имеет небольшое преимущество, поскольку он уже определен как константа, с другой стороны, вы можете определить свою собственную константу, которая имеет немного лучшее имя, например:

public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);

Comments

    Ничего не найдено.