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

Unity中C#代码逻辑异常排查:||运算符与空值判断问题

问题原因分析与修复方案

你的代码存在两个核心问题,导致逻辑完全不符合预期:

  • 赋值/比较运算符混淆
    代码里误用了赋值符号=,而非判断相等的比较符号==:

    • ScriptB.giveCookie = true是将true赋值给giveCookie变量,不是判断它是否等于true;
    • ScriptB = null是直接把ScriptB设置为null,不是判断它是否为空。
      这会直接修改变量值,彻底偏离你原本的判断逻辑。
  • 空引用风险与逻辑顺序错误
    就算改成比较运算符,原逻辑的执行顺序也会引发崩溃:如果ScriptB为空,先执行ScriptB.giveCookie的访问会触发空引用异常,程序直接终止,根本走不到判断ScriptB == null的分支。因为逻辑或||是从左到右执行的,左边表达式抛出异常时,右边代码不会执行。


修复后的代码(两种可选方式)

方式一:调整逻辑顺序,利用短路特性

if(ScriptB == null || ScriptB.giveCookie)
{
    GiveCookie();
}

这里先判断ScriptB是否为空,若为真则直接执行后续逻辑,不会触发空引用;若不为空,再判断giveCookie的值(布尔值无需和true比较,直接写变量名更简洁)。

方式二:使用空条件运算符(C# 6.0+支持)

if(ScriptB?.giveCookie != false || ScriptB == null)
{
    GiveCookie();
}

ScriptB?.giveCookie会在ScriptB为空时返回null,和false比较后,结合空判断实现预期逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 18:52:04