为什么我的数组长度表达式只返回1?

时间:2018-04-10 09:09:13

标签: c# arrays unity3d

我在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中创建的输出:

Sample Debug Log Output

这表明hero.power3,而allyPower0,但创建的string[3]不是创建string[1]。 / p>

是否有一些关于使用表达式来确定导致问题的数组的长度?我暂时改为:

int heroArrayLength = hero.power + allyPower;
report.flips[hero.name] = new string[heroArrayLength];

它似乎有所帮助,虽然之前的错误是不稳定的,所以我并不完全确定它是否已经修复。即使是这样,我仍然不清楚实际原因是什么。

有谁知道这里发生了什么?

1 个答案:

答案 0 :(得分:5)

如果hero.nameopponent.name相同,则:

report.flips[hero.name] = new string[hero.power + allyPower];
report.flips[opponent.name] = new string[opponent.power];

将设置相同的“翻转”(无论“翻转”是什么),第二次“获胜”。由于opponent.power1,因此最终数组的长度为1,这意味着report.flips[hero.name]的长度为1