You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为什么C#中用is判断true等非类型值不会触发编译错误

问题解答

  • 你观察到的编译行为变化确实是C# 8.0版本引入的常量模式匹配特性导致的,这属于is运算符的能力扩展:
    • C# 7及更早版本中,is运算符仅支持类型检查,后面只能跟类型声明,true是布尔常量不是类型,所以旧版本编译器会直接报错,和你测试的结果一致。
    • C# 8.0之后is运算符支持常量模式,后面可以跟任意合法的常量值,编译器会自动校验左值类型是否可与该常量做相等比较,校验通过就可以正常编译。
  • 对于bool类型的变量x,x is true和x == true的运行结果完全一致,编译器生成的底层IL代码没有任何差异,两种写法是等价的,哪怕你没有加模式匹配的花括号{}也不影响。
  • 你提到的整数场景也符合这个规则:比如5 is 5是合法的写法,返回结果为true,和5 == 5完全等价。
  • 唯一存在差异的场景是自定义了==运算符的类型:常量模式的相等比较采用C#默认的相等逻辑(值类型默认值比较、引用类型默认引用比较),如果某个类型重载了==运算符,可能会出现a is 常量和a == 常量结果不一致的情况,但布尔类型属于基础值类型,不存在这个问题。

内容的提问来源于stack exchange,提问作者RedX

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.13 11:27:03