我有两个可以为空的枚举,我想比较两个常规枚举的值.如果可以为空的枚举没有值,我希望比较评估为true.这是我的逻辑到目前为止的样子:
if (!nullableEnumOne.HasValue || nullableEnumOne.Value == regularEnumOne)
&& (!nullableEnumTwo.HasValue || nullableEnumTwo.Value == regularEnumTwo)
{
//do something
}
Run Code Online (Sandbox Code Playgroud)
有没有办法简化我错过的逻辑?
Jon*_*eet 13
使用null-coalescing运算符来"默认"到您要比较的值可能是最简单的:
if ((nullableEnumOne ?? regularEnumOne) == regularEnumOne &&
(nullableEnumTwo ?? regularEnumTwo) == regularEnumTwo)
Run Code Online (Sandbox Code Playgroud)
或坚持使用您当前的代码...或者比较null而不是使用否定条件:
if ((nullableEnumOne == null || nullableEnumOne.Value == regularEnumOne)
&& ((nullableEnumTwo == null || nullableEnumTwo.Value == regularEnumTwo))
Run Code Online (Sandbox Code Playgroud)
或者有点奇怪,您可以Equals使用null条件运算符调用,使用null coalescing运算符使null case为true:
if ((nullableEnumOne?.Equals(regularEnumOne) ?? true)
&& (nullableEnumTwo?.Equals(regularEnumTwo) ?? true))
Run Code Online (Sandbox Code Playgroud)
诚然,这些都不是大规模可读的.我很想写一个帮助方法,所以你可以写:
if (NullOrEqual(nullableEnumOne, regularEnumOne) &&
NullOrEqual(nullableEnumTwo, regularEnumTwo))
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
362 次 |
| 最近记录: |