How to convert DateTime? to DateTime
我想将一个可以为空的日期时间(
Cannot implicitly convert type 'System.DateTime?' to
'System.DateTime'. An explicit conversion exists (are you missing a
cast?)
我已尝试以下操作:
1 2 | DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate; |
您希望使用空合并运算符,它正是为此目的而设计的。
使用它,最终会得到这个代码。
1 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; |
MS已经为此创建了一个方法,因此您不必使用空合并运算符。功能上没有区别,但对于非专家来说,一目了然地了解正在发生的事情更容易。
1 | DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now); |
试试这个
1 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; |
需要调用可为空的日期时间的Value属性。这将返回日期时间。
假设
1 | DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; |
为了使代码更容易阅读,可以使用hasValue属性而不是
1 2 3 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now; |
这可以变得更加简洁:
1 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now; |
您可以使用简单的强制转换:
1 | DateTime dtValue = (DateTime) dtNullAbleSource; |
正如Leandro Tupone所说,您必须在之前检查var是否为空
下面是我在演示者中使用的一个片段,它用可为空的日期/时间填充视图
1 | memDateLogin = m.memDateLogin ?? DateTime.MinValue |
下面怎么样?
1 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now; |
您还可以尝试空(T)属性:
1 2 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; |
而是使用以下更好的方法
1 2 | DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate; |
1 | DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now; |
试试这个:
1 | DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value; |