为什么C#的is运算符比较布尔值结果正确?是否推荐使用?
关于C#中用
is运算符判断布尔值的用法说明 结论
is运算符判断布尔值属于完全合规的正确用法,完全符合C#语言规范,不存在使用错误的问题。
原理说明
C# 7.0版本引入模式匹配特性后,is运算符的能力就不再局限于早期的运行时类型检测,而是支持多种模式匹配场景,你用到的test is false就属于常量模式的用法:当is右侧是字面量常量时,会直接比较左侧表达式和常量的值是否相等,对于布尔类型来说,匹配逻辑和==运算符、逻辑非!完全一致,编译生成的底层代码也没有区别,不存在性能损耗。
你提供的两种写法都是完全正确的:
bool test = false; // 写法1:传统逻辑非写法 if(!test) { // some code } // 写法2:is常量模式写法 if(test is false) { // some code }
写法选择建议
- 两种写法没有功能和性能上的差异,具体选择可以遵循团队统一的代码规范即可
- 对于复杂逻辑嵌套的场景,
test is false的可读性优于!test,可以避免把逻辑非符号看漏的问题,同时也能规避误把==写成=的低级语法错误 - 部分开发者也会在可空布尔值(
bool?)场景下优先用is运算符,比如nullableBool is true,写法比nullableBool == true更简洁直观
内容的提问来源于stack exchange,提问作者PontiusTheBarbarian
相关产品推荐
相关产品推荐

