我有两个可以为空的枚举,我想比较两个常规枚举的值。如果可以为空的枚举没有值,我希望比较评估为true。这就是我的逻辑到目前为止的样子:
if (!nullableEnumOne.HasValue || nullableEnumOne.Value == regularEnumOne)
&& (!nullableEnumTwo.HasValue || nullableEnumTwo.Value == regularEnumTwo)
{
//do something
}
有没有办法简化我错过的逻辑?
答案 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))