DateTime. MinValue по сравнению с новым DateTime () в C#

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

DateTime varData = sqlQueryResult["Data"] is DateTime ? (DateTime) sqlQueryResult["Data"] : new DateTime();
10
задан MadBoy 16 March 2010 в 09:17
поделиться

6 ответов

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

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

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

PS: Вы можете рассмотреть возможность использования типов, допускающих значение NULL ( DateTime? ), если ваши данные могут содержать (значимые) нулевые значения.

18
ответ дан 3 December 2019 в 17:58
поделиться

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

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

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

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

1
ответ дан 3 December 2019 в 17:58
поделиться

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

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

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

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

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

2
ответ дан 3 December 2019 в 17:58
поделиться

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

1
ответ дан 3 December 2019 в 17:58
поделиться

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

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

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

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

public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);
0
ответ дан 3 December 2019 в 17:58
поделиться
Другие вопросы по тегам:

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