Сравнение значений с нулевым значением 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())
{ 
}