DateTime c#上的空合并运算符

时间:2018-07-04 13:15:27

标签: c# c#-6.0 c#-7.0

我个人喜欢null coalescing Operator,并尝试在我的吸气剂中使用它。但这似乎仅限于某些数据类型。 对于以下实例,则无法构建:

public DateTime From => Settings.Default.StartDate ?? DateTime.Today;

错误CS0019运算符'??'不能应用于类型为“ DateTime”和“ DateTime”的操作数

以下是:

public DateTime From => Settings.Default.StartDate == null ? DateTime.Today : Settings.Default.StartDate;

有人知道为什么吗?只是尚未实现还是我在这里缺少逻辑?

2 个答案:

答案 0 :(得分:6)

仅当该运算符左侧的表达式可为空时,该空合并运算符(??)才有效。

错误消息:

  

错误CS0019运算符'??'不能应用于类型的操作数   “ DateTime”和“ DateTime”

显示Settings.Default.StartDate不可为空-它是DateTime

这样,您需要将StartDate更改为可空 DateTime(即DateTime?)。

好的,但是为什么要这么做:

public DateTime From => Settings.Default.StartDate == null ? DateTime.Today : Settings.Default.StartDate;

编译?

简短的回答是,这是荒谬但在技术上有效的。与null的比较将始终为false(因为DateTime永远不会为null),因此将始终返回Settings.Default.StartDate。这只是一种令人费解的写作方式:

public DateTime From => Settings.Default.StartDate;

那么??为什么不做同样的事情? (即在没有用处的情况下让您使用??)基本上是因为它不是那样定义的-它不想让您做无意义的事情,因此编译器会检测到并阻止它。

答案 1 :(得分:0)

DateTime类型是一种结构(不是类/引用类型):https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx