如何用更精炼简化的方式编写C#空值检查代码?
优化方案
首先你这段代码里的三元运算符完全是多余的——括号里的表达式本身就返回bool值,没必要多此一举转成true/false。接下来结合你想学习的?.运算符,给你几种更简洁安全的写法:
1. 最推荐的简洁写法
bool HasPassed = "Passed".Equals(result?.Identifier);
这个写法的好处:
- 用
?.运算符自动处理result为null的情况,此时result?.Identifier返回null - 调用常量字符串的
Equals方法,即使参数是null也不会抛空引用异常,直接返回false,完全符合你原逻辑的判断结果
2. 保留原调用顺序的写法
如果你习惯用Identifier的Equals方法,也可以这么写:
bool HasPassed = result?.Identifier?.Equals("Passed") ?? false;
解释:
result?.Identifier先判断result是否为null,null的话直接返回null,不会继续调用Equals- 当
result?.Identifier?.Equals("Passed")返回null时(也就是result为null或者Identifier为null),用??空合并运算符把null转换成false,最终得到正确的bool值
对比原代码的优化点
- 去掉了冗余的三元运算符,代码更简洁
- 用
?.替代了手动的result != null判断,可读性更好 - 两种写法都避免了空引用异常的风险(原代码其实也不会抛,但优化后的写法更优雅)
测试一下你的示例场景:
- 当
result = null时,两种写法都返回false - 当
result.Identifier = "Passed"时,返回true - 当
result.Identifier是其他值或者null时,返回false,完全符合你的需求
内容的提问来源于stack exchange,提问作者Dre
相关产品推荐
相关产品推荐

