Есть ли в C # простой способ проверить, присвоено ли экземпляру DateTime значение или нет?
131
Единственный способ иметь переменную, которой не было присвоено значение в C #, - это сделать ее локальной переменной - и в этом случае во время компиляции вы можете сказать, что она не назначена определенно, попытавшись прочитать из нее: )
Я подозреваю, что вы действительно хотите Nullable<DateTime>
(или DateTime?
с синтаксическим сахаром C #) - сделайте это null
для начала, а затем назначьте нормальное DateTime
значение (которое будет преобразовано соответствующим образом). Затем вы можете просто сравнить null
(или использовать HasValue
свойство), чтобы увидеть, установлено ли «реальное» значение.
default(DateTime)
и тем, с которым изначально было именно так. В основном он обрабатывает одно значение в домене как «особое и недоступное для нормального использования», что мне не нравится.ты имеешь в виду так:
или вы можете использовать Nullable
источник
положите это куда-нибудь:
затем:
источник
IsEmpty
метод вернет true, что, вероятно, не то, что вам нужно (потому что оно не пустое - ему было присвоено значение по умолчанию). Думаю, название вашего метода больше подошло быIsDefaultValue
. Поскольку у вас действительно не может быть DateTime, не допускающего значения NULLIsEmpty
.IsDefaultValue
было бы лучшеDateTime - это тип значения, поэтому он не может быть нулевым. Если вы думаете DateTime? (Nullable) вы можете использовать:
источник
Я только что узнал, что GetHashCode () для неназначенного datetime всегда равен нулю. Я не уверен, что это хороший способ проверить значение null datetime, потому что я не могу найти никакой документации о том, почему отображается такое поведение.
источник
GetHashCode
возвращает 0 из - за клещами (внутреннее представление DateTime) также равен 0. Hash код вычисленного следующим образом:unchecked((int)ticks) ^ (int)(ticks >> 32);
. Также смотрите здесь: referencesource.microsoft.com/#mscorlib/system/datetime.cs,836Используйте,
Nullable<DateTime>
если возможно.источник
Я бы сказал, что значение по умолчанию всегда
new DateTime()
. Итак, мы можем написатьисточник
Я обычно предпочитаю, где это возможно, использовать значение по умолчанию для типов значений, чтобы определить, были ли они установлены. Очевидно, что это невозможно постоянно, особенно с целыми числами, но для DateTimes я думаю, что зарезервировать MinValue для обозначения того, что оно не было изменено, достаточно справедливо. Преимущество этого по сравнению с значениями NULL состоит в том, что на одно место меньше, где вы получите исключение с нулевой ссылкой (и, вероятно, во многих местах, где вам не нужно проверять значение NULL перед доступом к нему!)
источник
Если вы не хотите беспокоиться о проблемах с нулевым значением, например о проверке на null каждый раз, когда вы его используете или обертываете его в какой-то логике, и вы также не хотите беспокоиться о проблемах времени смещения, тогда это как я решил проблему:
Я просто проверяю, что значение по умолчанию меньше, чем через день после начала времени. Работает как шарм.
источник