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

Unity中外观完全一致的两个字符串判定为不相等的问题求助

C#字符串比对不一致问题排查方案
  • 大小写混淆问题:部分字体下大小写字符视觉差异极小,比如首字母大写的Primary和全小写的primary很难通过日志肉眼区分,可先通过忽略大小写的比对验证:使用string.Equals(ItemSubType, "primary", StringComparison.OrdinalIgnoreCase)做测试,如果比对通过则说明存在大小写不匹配的问题。
  • 隐藏不可见字符问题:除普通空格外,零宽空格、全角空格、换行/制表符等特殊字符都不会在日志中显示,你可以通过打印字符串长度快速校验:Debug.Log("标准primary长度:" + "primary".Length + ",变量ItemSubType长度:" + ItemSubType.Length),如果两者长度不一致即可判定存在隐藏字符,再遍历变量的每个字符打印对应的ASCII码即可定位异常字符。
  • Unity序列化覆盖问题:public修饰的字符串字段会被Unity序列化,Inspector面板中设置的字段值优先级高于代码动态赋值,很可能其他脚本赋值完成后,Unity的序列化机制又将字段值覆盖为Inspector中的旧值。可直接检查挂载对象的Inspector面板对应字段值,或是将字段改为[SerializeField] private修饰避免意外赋值。
  • 比较规则差异问题:C#默认的==字符串比较会受当前运行环境的文化设置影响,可能出现视觉上相同但判定不相等的情况,推荐使用无文化依赖的序号比对规则:string.Equals(ItemSubType, "primary", StringComparison.Ordinal),该规则会逐字节对比字符串内容,不会出现规则类判定偏差。

排查参考代码:

// 长度校验
Debug.Log("primary标准长度:" + "primary".Length);
Debug.Log("ItemSubType实际长度:" + ItemSubType.Length);

// 逐字符打印ASCII码定位异常
for (int i = 0; i < ItemSubType.Length; i++)
{
    Debug.Log($"第{i}位字符:{ItemSubType[i]},ASCII码:{(int)ItemSubType[i]}");
}

// 推荐使用的比较写法
if (!string.Equals(ItemSubType, "primary", StringComparison.Ordinal))
{
    Debug.Log("字符串确实不相等");
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 03:06:05