我正在尝试确定2个可空日期之间是否存在差异。 。是否有更优雅的方式而不是:
if (newDate.HasValue && (!oldDate.HasValue || (oldDate.HasValue && oldDate.Value.Date != mewDate.Value.Date)))
答案 0 :(得分:1)
C#编译器会自动提升==
和!=
等逻辑运算符而不是nullalbe类型,因此您通常可以直接比较它们而不是检查HasValue
。在这种情况下,您可以在检查!=
不为空后与newDate
进行比较。
if(newDate.HasValue && newDate != oldDate)
在说明书中描述:
7.3.7解除运营商
提升的运营商允许预定义和用户定义的运营商 对非可空值类型进行操作也可以与可空字段一起使用 这些类型的形式。
对于相等运算符 ==!=如果操作数类型都是非可空值类型且结果类型为bool,则存在提升形式的运算符。 提升形式是通过添加一个?每个修饰符 操作数类型。提升的运算符认为两个空值相等,和 null值不等于任何非null值。如果两个操作数都是 非空,提升的运算符解包操作数并应用 底层算子产生布尔结果。