我想将可以为空的DateTime(DateTime?
)转换为DateTime
,但我收到错误:
无法隐式转换类型'System.DateTime?'至 'System.DateTime的'。存在显式转换(你错过了吗? 投?)
我尝试过以下方法:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
答案 0 :(得分:279)
您想要使用专为此目的而设计的null-coalescing operator。
使用它最终得到这段代码。
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
答案 1 :(得分:79)
MS已经为此创建了一个方法,因此您不必使用null合并运算符。功能上没有区别,但非专家更容易一目了然地获得正在发生的事情。
DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
答案 2 :(得分:40)
试试这个
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
答案 3 :(得分:21)
您需要调用可为空的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;
答案 4 :(得分:16)
您可以使用简单的演员:
DateTime dtValue = (DateTime) dtNullAbleSource;
正如Leandro Tupone所说,你必须在
之前检查var是否为null答案 5 :(得分:6)
以下内容如何:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
答案 6 :(得分:6)
以下是我在Presenter中使用的片段,用于填充具有可空日期/时间的视图
memDateLogin = m.memDateLogin ?? DateTime.MinValue
答案 7 :(得分:3)
您还可以尝试Nullable(T) Properties:
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
答案 8 :(得分:1)
而不是用户以下更好的
DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate == null
? DateTime.Now : (DateTime)_objHotelPackageOrder.UpdatedDate;
答案 9 :(得分:0)
试试这个:
DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
答案 10 :(得分:0)
DateTime UpdatedTime = _objHotelPackageOrder.HasValue ? _objHotelPackageOrder.UpdatedDate.Value : DateTime.Now;