DateTime c#上的空合并运算符

k4y*_*man 2 c# c#-6.0 c#-7.0

我个人喜欢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)

有谁知道为什么?它还没有实现还是我错过了这里的逻辑?

mjw*_*lls 6

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)

那么为什么??不做同样的事情呢?(即让你在使用??它时没有意义的时候使用)基本上因为它没有这样定义 - 它不希望你做一个荒谬的事情,所以编译器会检测并阻止它.