我想转换一个可空的DateTime (DateTime?)到一个DateTime,但我得到一个错误:

不能隐式转换类型` System.DateTime?” “System.DateTime”。存在显式转换(是否缺少 演员?)

我尝试了以下几点:

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

当前回答

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

其他回答

您希望使用空合并操作符,该操作符正是为此目的而设计的。

使用它,您最终会得到以下代码。

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

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

假设UpdatedDate是DateTime?,那么这个应该可以工作:

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;

MS已经为此做了一个方法,所以你不必使用空合并操作符。在功能上没有区别,但是对于非专业人士来说更容易一目了然地了解正在发生的事情。

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

试试这个:

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

试试这个

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