查看可空类型是否有值的最简洁方法是什么,如果有,将该值与另一个不可空类型的值进行比较?
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))
我有两个可为 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))