gpt4 book ai didi

c# - DateTime c# 上的空合并运算符

转载 作者:行者123 更新时间:2023-11-30 20:16:02 25 4
gpt4 key购买 nike

我个人喜欢 null coalescing Operator我尝试在我的 setter/getter 中使用它。但它似乎仅限于某些数据类型。例如以下未构建:

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

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

下面是:

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

有人知道为什么吗?它只是尚未实现还是我错过了这里的逻辑?

最佳答案

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

错误信息:

Error CS0019 Operator '??' cannot be applied to operands of type 'DateTime' and 'DateTime'

表明 Settings.Default.StartDate 不可为 null - 它是一个 DateTime

因此,您需要将 StartDate 改为 nullable 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;

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

关于c# - DateTime c# 上的空合并运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51174641/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com