查看可空类型是否有值的最简洁方法是什么,如果有,将该值与另一个不可空类型的值进行比较?

What is the cleanest way to see if a nullable type has a value, and if it does, to compare the value to another non-nullable type's value?

我有两个可为 null 的枚举,我想将它们的值与两个常规枚举进行比较。如果可为 null 的枚举没有值,我希望比较结果为真。到目前为止,我的逻辑是这样的:

if (!nullableEnumOne.HasValue || nullableEnumOne.Value == regularEnumOne) 
    && (!nullableEnumTwo.HasValue || nullableEnumTwo.Value == regularEnumTwo)
{
    //do something
}

有没有办法简化我缺少的这个逻辑?

使用 null-coalescing operator 到 "default" 到您要比较的值可能是最简单的:

if ((nullableEnumOne ?? regularEnumOne) == regularEnumOne &&
    (nullableEnumTwo ?? regularEnumTwo) == regularEnumTwo)

或者坚持使用您当前的代码...或者与 null 进行比较而不是使用否定条件:

if ((nullableEnumOne == null || nullableEnumOne.Value == regularEnumOne) 
    && ((nullableEnumTwo == null || nullableEnumTwo.Value == regularEnumTwo))

或者有点奇怪,您可以使用 null 条件运算符调用 Equals,使用 null 合并运算符使 null 大小写为真:

if ((nullableEnumOne?.Equals(regularEnumOne) ?? true)
   && (nullableEnumTwo?.Equals(regularEnumTwo) ?? true))
无可否认,

None 其中 大量 可读。我很想写一个辅助方法,所以你可以这样写:

if (NullOrEqual(nullableEnumOne, regularEnumOne) &&
    NullOrEqual(nullableEnumTwo, regularEnumTwo))