DateTime c# 上的空合并运算符
Null coalescing Operator on DateTime c#
我个人喜欢 null coalescing Operator 并尝试在我的 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
不可为空 - 它是 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;
那么为什么 ??
不做同样的事情呢? (即让你使用 ??
当它真的没有意义时使用它)基本上是因为它不是那样定义的 - 它不想让你做无意义的事情,所以编译器检测到并阻止它。
DateTime 类型是一个结构(不是 class/reference 类型):https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx
我个人喜欢 null coalescing Operator 并尝试在我的 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
不可为空 - 它是 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;
那么为什么 ??
不做同样的事情呢? (即让你使用 ??
当它真的没有意义时使用它)基本上是因为它不是那样定义的 - 它不想让你做无意义的事情,所以编译器检测到并阻止它。
DateTime 类型是一个结构(不是 class/reference 类型):https://msdn.microsoft.com/en-us/library/system.datetime(v=vs.110).aspx