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

时间:2017-11-08 17:47:45

标签: c# nullable

我有两个可以为空的枚举,我想比较两个常规枚举的值。如果可以为空的枚举没有值,我希望比较评估为true。这就是我的逻辑到目前为止的样子:

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

有没有办法简化我错过的逻辑?

1 个答案:

答案 0 :(得分:13)

使用null-coalescing operator至"默认"可能最简单与您进行比较的价值:

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

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

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

或者有点奇怪,您可以使用null条件运算符调用Equals,使用null coalescing运算符使null case为true:

if ((nullableEnumOne?.Equals(regularEnumOne) ?? true)
   && (nullableEnumTwo?.Equals(regularEnumTwo) ?? true))

无可否认,这些都不是大规模可读。我很想写一个帮助方法,所以你可以写:

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