有没有更好的方法来比较可以为null的日期

本文关键字:null 日期 比较 更好 方法 有没有 | 更新日期: 2023-09-27 18:30:07

我正在尝试确定两个可为null的日期之间是否存在差异。有比这更优雅的方法吗:

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

有没有更好的方法来比较可以为null的日期

C#编译器会自动将==!=等逻辑运算符提升到nullable类型上,因此您通常可以直接比较它们,而不是检查HasValue。在这种情况下,一旦检查了newDate不为空,就可以与!=进行比较。

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

规范中有描述:

7.3.7升降机操作员

升降机操作员允许预定义和用户定义的操作员对不可为null的值类型进行操作,以便也与nullable一起使用这些类型的形式。

对于相等运算符===!=如果操作数类型都是不可为null的值类型,并且结果类型是bool,则存在运算符的提升形式。这个提升模板是通过添加单个?每个的修饰符操作数类型。提升操作员认为两个零值相等,并且不等于任何非零值的零值。如果两个操作数都是非null时,提升运算符将展开操作数并应用生成布尔结果的底层运算符。