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

可空类型对象判空异常:返回False却进入null分支

问题原因分析与解决办法

核心问题:运算符优先级导致的Debug输出错误

你写的Debug.Log("check" + unit==null)存在运算符优先级问题:C#中字符串拼接+的优先级高于相等比较==,所以这个表达式会先执行"check" + unit,把unit转换成字符串后拼接成新字符串,再将这个字符串和null比较。

  • 哪怕unit确实是null,拼接后会得到"checknull"这个非空字符串,和null比较的结果必然是False,所以这个输出完全无法反映unit的真实状态。

正确的Debug写法

要准确输出unit是否为null,必须给比较表达式加括号,强制先执行null判断:

Debug.Log("check " + (unit == null));

为什么if (unit==null)会进入分支

if (unit==null) continue;是直接对unit和null做比较,没有优先级干扰,所以这个判断是准确的。这说明你的unit??=new Unit(pars)并没有成功给unit赋值,可能的原因包括:

  • 构造函数new Unit(pars)执行时抛出了异常,导致赋值失败
  • 这段赋值代码所在的分支没有被执行到,unit始终保持null状态

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.14 21:05:59