DateTime.MinValue против нового DateTime () в C # - PullRequest
10 голосов
/ 16 марта 2010

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

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

Ответы [ 6 ]

18 голосов
/ 16 марта 2010

С документация DateTime.MinValue :

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

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

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

2 голосов
/ 16 марта 2010

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

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

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

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

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

1 голос
/ 16 марта 2010

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

1 голос
/ 16 марта 2010

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

0 голосов
/ 16 марта 2010

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

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

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

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

public const DateTime DateThatMeansNull = new DateTime(1685, 3, 21);
0 голосов
/ 16 марта 2010

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...