比较可以为空的DateTime?

寻找更好的方法来比较可以为空的日期时间而不是以下:

有什么建议?

// myobject.ExpireDatetime is of DateTime? // if (!myobject.ExpireDateTime.IsNull() && DateTime.Compare((DateTime)myobject.ExpireDateTime, DateTime.Now.ToUniversalTime()) < 0) { //error! } 

编辑:很抱歉混淆… myobject.ExpireDatetime是DateTime类型。

你的问题对我来说不是很清楚,但如果有的话

 DateTime? ExpireDateTime; // could be a variable or a property 

可以这么说

 if (ExpireDateTime < DateTime.UtcNow) { ... } 

如果ExpireDateTimenullHasValue为false),则可以。 一些缺乏经验的开发人员很难理解提升的操作员 ,所以为了更清楚,你可以写

 if (ExpireDateTime < (DateTime?)DateTime.UtcNow) { ... } 

它是一样的,但更容易阅读和理解。

当然,如果可以为null,则永远不要.Value 。 如果这样做,您将获得InvalidOperationException “Nullable对象必须具有值”

我建议你使用以下内容:

 int y = Nullable.Compare(DateTime.UtcNow, x); // x is the nullable date time object. // y will be '-1' if x is greater than DateTime.UtcNow 

使用可空的Value属性:

 objet.ExpireDateTime.Value 

 if (!object.ExpireDateTime.IsNull() && DateTime.Compare(objet.ExpireDateTime.Value, DateTime.Now.ToUniversalTime()) < 0) { } 

如果ExpireDateTimeNullable我会改为:

 if (ExpireDateTime.HasValue && ExpireDateTime < DateTime.Now.ToUniversalTime()) { }