1

我正在尝试确定 2 个可空日期之间是否存在差异。. 有没有更优雅的方法来代替这个:

  if (newDate.HasValue && (!oldDate.HasValue ||  (oldDate.HasValue && oldDate.Value.Date != mewDate.Value.Date)))
4

1 回答 1

1

C# 编译器会自动提升逻辑运算符==,例如!=nullalbe 类型,因此您通常可以直接比较它们而不是检查HasValue. 在这种情况下,您可以!=在检查了newDate不为空的情况下进行比较。

if(newDate.HasValue && newDate != oldDate)

它在规范中描述:

7.3.7 吊运操作员

提升的运算符允许对不可为空的值类型进行操作的预定义和用户定义的运算符也与这些类型的可空形式一起使用。

对于等式运算符 == != 如果操作数类型都是不可为空的值类型并且结果类型是 bool,则存在运算符的提升形式。提升形式是通过添加单个 ? 每个操作数类型的修饰符。提升的运算符认为两个空值相等,一个空值不等于任何非空值。如果两个操作数都不为空,则提升的运算符解包操作数并应用底层运算符以产生 bool 结果。

于 2013-09-02T21:22:51.277 回答