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

为何空条件运算符(?.)调用返回bool的函数会报错?

问题原因解析

核心根源在于空条件运算符?.会将方法调用的结果包装为可空值类型,而C#的if语句对条件类型有严格要求:

  • 当你写a?.func()时,由于func()返回bool,?.会把结果转换成bool?(可空布尔类型)。但if语句要求条件必须是非可空的bool类型,bool?无法隐式转换为bool,因此直接放在if中会触发编译错误。
  • 对于a?.func2() == 10,func2()返回int,?.让结果变成int?(可空整数类型)。当可空整数和普通整数做相等比较时,C#会自动处理比较逻辑,最终返回一个确定的bool值(相等为true,不等为false),完全符合if的条件要求,因此可以正常运行。
  • 当你写a?.func() == true时,是将bool?类型的结果与bool类型的true做比较,这个比较的结果是明确的bool值:若a不为空且func()返回true,结果为true;若a为空或func()返回false,结果为false。这个确定的布尔值可以直接作为if的条件,所以代码能正常执行。

如果想更直接地处理bool?类型的条件,也可以用HasValue属性判断,比如if(a?.func().HasValue == true && a?.func().Value),但显然和true直接比较的写法更简洁。

内容的提问来源于stack exchange,提问作者신동철

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 23:05:18