значение 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();

6 ответов


С документация по DateTime.Параметр minvalue:

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

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

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


обычно, я бы справился с NULL case явно. Что-то вроде этого:--7-->

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

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

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

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


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


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


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

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


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

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

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

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

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