如何转换DateTime?到DateTime

Wah*_*eed 156 .net c# datetime

我想将一个可以为空的DateTime(DateTime?)转换为a DateTime,但是我收到一个错误:

无法隐式转换类型'System.DateTime?' 到'System.DateTime'.存在显式转换(您是否错过了演员?)

我尝试过以下方法:

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null 
    ? DateTime.Now : _objHotelPackageOrder.UpdatedDate;
Run Code Online (Sandbox Code Playgroud)

chi*_*s42 290

您希望使用null-coalescing运算符,该运算符专为此目的而设计.

使用它你最终得到这个代码.

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

  • 这是我在演示者中使用的一个片段,用可空日期/时间填充视图:`memDateLogin = m.memDateLogin ?? 日期时间.MinValue` (2认同)

小智 82

MS已经为此创建了一个方法,因此您不必使用null合并运算符.功能上没有区别,但非专家更容易一目了然地获得正在发生的事情.

DateTime updatedTime = _objHotelPackageOrder.UpdatedDate.GetValueOrDefault(DateTime.Now);
Run Code Online (Sandbox Code Playgroud)


Val*_*yev 41

试试这个

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Run Code Online (Sandbox Code Playgroud)


adr*_*nks 21

您需要调用可为空的DateTime 的Value属性.这将返回DateTime.

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

DateTime UpdatedTime = (DateTime)_objHotelPackageOrder.UpdatedDate == null ? DateTime.Now : _objHotelPackageOrder.UpdatedDate.Value;
Run Code Online (Sandbox Code Playgroud)

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

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue
                          ? _objHotelPackageOrder.UpdatedDate.Value
                          : DateTime.Now;
Run Code Online (Sandbox Code Playgroud)

然后可以更简洁:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate ?? DateTime.Now;
Run Code Online (Sandbox Code Playgroud)


Cés*_*eón 16

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

DateTime dtValue = (DateTime) dtNullAbleSource;
Run Code Online (Sandbox Code Playgroud)

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

  • 如果在+1之前检查var是否为null,则是完美的 (5认同)

Sim*_*son 6

以下内容如何:

DateTime UpdatedTime = _objHotelPackageOrder.UpdatedDate.HasValue ? _objHotelPackageOrder.UpdatedDate.value : DateTime.Now;
Run Code Online (Sandbox Code Playgroud)


Rav*_*Ram 6

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

memDateLogin = m.memDateLogin ?? DateTime.MinValue
Run Code Online (Sandbox Code Playgroud)