我个人喜欢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;
有人知道为什么吗?只是尚未实现还是我在这里缺少逻辑?
答案 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