怎么转换DateTime?到DateTime


171

我想将可为null的DateTime(DateTime?)转换为DateTime,但出现错误:

无法隐式转换类型'System.DateTime?' 到“ System.DateTime”。存在显式转换(您是否缺少演员表?)

我尝试了以下操作:

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

Answers:


304

您想使用null-coalescing运算符,正是出于这个目的而设计的。

使用它,您最终得到这段代码。

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

1
这是我在演示者中使用的片段,该片段用可空的日期/时间填充视图: memDateLogin = m.memDateLogin ?? DateTime.MinValue
Ravi Ram 2012年

'约会时间?' 剂量不包含“UpdatedDate”的定义
瓦西Valchev

88

MS已经为此制定了一种方法,因此您不必使用null合并运算符。功能上没有区别,但非专家更容易一目了然。

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


24

您可以使用简单的演员表:

DateTime dtValue = (DateTime) dtNullAbleSource;

正如Leandro Tupone所说,您必须先检查var是否为null


6
完美,如果您在+1之前检查var是否为空
Leandro

22

您需要调用可为空的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;

6

怎么样:

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

6

这是我在Presenter中使用的片段,其中使用可空的日期/时间填充视图

memDateLogin = m.memDateLogin ?? DateTime.MinValue


1

考虑使用以下方法,其效果远胜于可接受的答案

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

小心地说为什么它更好?
n4rzul

0

试试这个:

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

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

4
通常,这是解释您的建议/答案的好形式。即使仅在技术上正确,仅代码答案也可能令人惊讶地提供的信息不足。
Maximilian Ast

1
@MaximilianAst是的,您是对的,将尝试实现您建议的方式:)
Harsh Vyas
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.