C# 7.0类型模式:如何反转布尔对象的判断表达式?
用C# 7.0类型模式反转判断逻辑的方案
当然可以实现!咱们先拆解一下原代码的逻辑:你原来的代码是当对象是bool类型且值为true时跳过操作,否则执行DoSomething()。现在要反转这个if表达式,直接判断“对象不是bool类型,或是bool类型但值为false”的情况,不用再依赖else分支。
不过得注意,C# 7.0还没引入not和or这类更简洁的模式匹配关键字,所以咱们得用它支持的语法来组合条件:
if ((obj is bool falseBoolean && !falseBoolean) || !(obj is bool)) { DoSomething(); }
这个表达式和你原来的else分支逻辑完全等价:
- 第一部分
obj is bool falseBoolean && !falseBoolean:匹配“是bool类型但值为false”的情况 - 第二部分
!(obj is bool):匹配“不是bool类型”的情况 - 用
||连接两个条件,就覆盖了你需要的所有场景
如果是用C# 9.0及以上的版本,写法会更优雅:
// C# 9.0+ 支持的简洁写法 if (obj is not bool or false) { DoSomething(); }
但既然你限定了C# 7.0,前面的写法就是最贴合要求的实现啦。
内容的提问来源于stack exchange,提问作者Ivan García Topete
相关产品推荐
相关产品推荐

