我个人喜欢null合并运算符,我尝试在我的getters中使用它.但它似乎仅限于某些数据类型.对于以下实例未构建:
public DateTime From => Settings.Default.StartDate ?? DateTime.Today;
Run Code Online (Sandbox Code Playgroud)
错误CS0019运算符'??' 不能应用于'DateTime'和'DateTime'类型的操作数
以下是:
public DateTime From => Settings.Default.StartDate == null ? DateTime.Today : Settings.Default.StartDate;
Run Code Online (Sandbox Code Playgroud)
有谁知道为什么?它还没有实现还是我错过了这里的逻辑?
null合并运算符(??)仅在运算符左侧的表达式可为空时才有效.
错误消息:
错误CS0019运算符'??' 不能应用于'DateTime'和'DateTime'类型的操作数
显示Settings.Default.StartDate不可为空 - 它是一个DateTime.
因此,您需要将其更改StartDate为可为空 DateTime(即DateTime?).
好的,但为什么呢:
public DateTime From => Settings.Default.StartDate == null ? DateTime.Today : Settings.Default.StartDate;
Run Code Online (Sandbox Code Playgroud)
编译?
简短的回答是,这是荒谬的,但在技术上是有效的.比较null将始终是false(因为DateTime永远不会null),因此Settings.Default.StartDate将始终返回.这只是一种令人费解的写作方式:
public DateTime From => Settings.Default.StartDate;
Run Code Online (Sandbox Code Playgroud)
那么为什么??不做同样的事情呢?(即让你在使用??它时没有意义的时候使用)基本上因为它没有这样定义 - 它不希望你做一个荒谬的事情,所以编译器会检测并阻止它.