DateTime "нулевое" значение - PullRequest
       66

DateTime "нулевое" значение

248 голосов
/ 21 октября 2008

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

Ответы [ 15 ]

388 голосов
/ 21 октября 2008

Для обычных DateTimes, если вы вообще их не инициализируете, они будут соответствовать DateTime.MinValue, потому что это тип значения, а не ссылочный тип.

Вы также можете использовать обнуляемый DateTime, например:

DateTime? MyNullableDate;

Или более длинная форма:

Nullable<DateTime> MyNullableDate;

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

default(DateTime)
81 голосов
/ 21 октября 2008

Если вы используете .NET 2.0 (или более позднюю версию), вы можете использовать тип nullable:

DateTime? dt = null;

или

Nullable<DateTime> dt = null;

затем позже:

dt = new DateTime();

И вы можете проверить значение с помощью:

if (dt.HasValue)
{
  // Do something with dt.Value
}

Или вы можете использовать его как:

DateTime dt2 = dt ?? DateTime.MinValue;

Вы можете прочитать больше здесь:
http://msdn.microsoft.com/en-us/library/b3h38hb0.aspx

28 голосов
/ 28 апреля 2010

DateTime? MyDateTime {получить, установить;}

MyDateTime = (dr["f1"] == DBNull.Value) ? (DateTime?)null : ((DateTime)dr["f1"]);
22 голосов
/ 06 февраля 2017

Следующий способ также работает

myClass.PublishDate = toPublish ? DateTime.Now : (DateTime?)null;

Обратите внимание, что свойство PublishDate должно быть DateTime?

12 голосов
/ 21 октября 2008

Я бы рассмотрел использование обнуляемых типов .

DateTime? myDate вместо DateTime myDate.

6 голосов
/ 21 октября 2008

Для этого вы можете использовать обнуляемый DateTime.

Nullable<DateTime> myDateTime;

или то же самое, написанное так:

DateTime? myDateTime;
6 голосов
/ 21 октября 2008

Вы можете использовать обнуляемый класс.

DateTime? date = new DateTime?();
5 голосов
/ 01 мая 2014

Стоит отметить, что, хотя переменная DateTime не может быть null, ее все равно можно сравнить с null без ошибки компилятора:

DateTime date;
...
if(date == null) // <-- will never be 'true'
  ...
5 голосов
/ 21 октября 2008

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

4 голосов
/ 21 октября 2008

Вы можете установить DateTime в Nullable. По умолчанию DateTime не обнуляется. Вы можете сделать его обнуляемым несколькими способами. Использование знака вопроса после типа DateTime? myTime или используя общий стиль Nullable. Я добавил пару ссылок на MSDN.

Использование Nullable

Nullable

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