Сравнение значений с нулевым значением DateTime?
Ищите лучший способ сравнить время с датой NULL, чем следующее:
Любые предложения?
// myobject.ExpireDatetime is of DateTime?
//
if (!myobject.ExpireDateTime.IsNull() && DateTime.Compare((DateTime)myobject.ExpireDateTime, DateTime.Now.ToUniversalTime()) < 0)
{ //error! }
Отредактировано: Извините за недоразумение... myobject.ExpireDatetime имеет тип DateTime.
Ответы
Ответ 1
Ваш вопрос не совсем ясен, но если у нас
DateTime? ExpireDateTime; // could be a variable or a property
ОК, чтобы сказать просто
if (ExpireDateTime < DateTime.UtcNow)
{
...
}
Это будет ОК, если ExpireDateTime
- null
(HasValue
- false). Некоторым неопытным разработчикам будет сложно понять снятые операторы, поэтому, чтобы сделать его более понятным, вы можете написать
if (ExpireDateTime < (DateTime?)DateTime.UtcNow)
{
...
}
То же самое, но легче читать и понимать.
Никогда не пишите .Value
, если нулевое значение может быть нулевым, конечно. Вы получите InvalidOperationException
"Объект Nullable должен иметь значение", если вы это сделаете.
Ответ 2
Я бы порекомендовал вам использовать следующее:
int y = Nullable.Compare<DateTime>(DateTime.UtcNow, x);
// x is the nullable date time object.
// y will be '-1' if x is greater than DateTime.UtcNow
Ответ 3
Используйте свойство Value
значения nullable:
objet.ExpireDateTime.Value
if (!object.ExpireDateTime.IsNull()
&& DateTime.Compare(objet.ExpireDateTime.Value,
DateTime.Now.ToUniversalTime()) < 0)
{
}
Ответ 4
Если ExpireDateTime
является Nullable<DateTime>
, я бы сделал следующее:
if (ExpireDateTime.HasValue && ExpireDateTime < DateTime.Now.ToUniversalTime())
{
}