如何转换DateTime? 到DateTime

我想将一个可为空的DateTime( DateTime? )转换为DateTime ,但是出现错误:

 "Cannot implicitly convert type 'System.DateTime?' to 'System.DateTime'. An explicit conversion exists (are you missing a cast?)" 

我曾尝试以下几点:

 DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate; 

您想要使用专为此目的而devise的空合并运算符 。

使用它你结束了这个代码。

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; 

MS已经为此做了一个方法,所以你不必使用null合并运算符。 在function上没有区别,但非专家更容易一目了然。

 DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now); 

尝试这个

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; 

您需要调用可空的DateTime的Value属性。 这将返回一个DateTime。

假设UpdatedDateDateTime? ,那么这应该工作:

 DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; 

为了使代码更容易阅读,你可以使用HasValue属性而不是null检查:

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now; 

这可以做得更加简洁:

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; 

以下情况如何:

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now; 

你可以使用一个简单的演员:

 DateTime dtValue = (DateTime) dtNullAbleSource; 

这是我用Presenter填充视图的可空date/时间的片段

 memDateLogin = m.memDateLogin ?? DateTime.MinValue 

您也可以尝试可空(T)属性 :

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; 

相反用户以下更好

 DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate; 

尝试这个:

 DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; 
 DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;