我在Unity工作,只是注意到有时出现了一个奇怪的错误。发生的事情是我实例化的字符串数组创建得太短,即使我写的日志消息确认表达式应创建一个更大的阵列。
以下是相关的代码片段:
Debug.Log("hero.power = " + hero.power.ToString());
Debug.Log("allyPower = " + allyPower.ToString());
Debug.Log("opponent.power = " + opponent.power.ToString());
int max = Mathf.Max(hero.power + allyPower, opponent.power);
report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];
Debug.Log("max = " + max.ToString());
Debug.Log("report.flips[hero.name].Length = " + report.flips[hero.name].Length.ToString());
这在Unity中创建的输出:
这表明hero.power
为3
,而allyPower
为0
,但创建的string[3]
不是创建string[1]
。 / p>
是否有一些关于使用表达式来确定导致问题的数组的长度?我暂时改为:
int heroArrayLength = hero.power + allyPower;
report.flips[hero.name] = new string[heroArrayLength];
它似乎有所帮助,虽然之前的错误是不稳定的,所以我并不完全确定它是否已经修复。即使是这样,我仍然不清楚实际原因是什么。
有谁知道这里发生了什么?
答案 0 :(得分:5)
如果hero.name
与opponent.name
相同,则:
report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];
将设置相同的“翻转”(无论“翻转”是什么),第二次“获胜”。由于opponent.power
为1
,因此最终数组的长度为1
,这意味着report.flips[hero.name]
的长度为1
。