【发布时间】:2021-08-24 21:12:15
【问题描述】:
所以是的,这是一个简单的 IndexOutOfRange 异常——不要恨我。但是,我正在做的事情应该工作,但不是。我在 Unity 中使用 C#。我将不胜感激!
在下面的代码中,我需要访问列表中的下一个键。如果在 [i] 之后没有找到键,则从循环中中断。简单的...? 出于某种原因,它似乎没有进行检查。
for (int i = 0; i < keys.Count; i++)
{
// if the number of keys is less than the hypothetical next index, then exit the loop
if (keys.Count < i + 1)
break;
// I am getting the error for this line
Key nextKey = keys[i + 1];
// do something with nextKey...
}
我确信有人会建议在 for 循环中只执行 keys.Count-1,但是当我这样做时,我的脚本的其他部分无法按预期工作。必须有另一种方式,对吧?也许我忽略了一些简单的事情。
感谢您的建议!
【问题讨论】:
-
检查循环。您声明“i”,但随后在评估中使用“k”
-
可以将你的 if 改写为
if (i + 1 >= keys.Count) break; -
为什么你认为它“应该工作”?对于
i的什么值,您的逻辑失败了?你明白为什么吗? -
好像你写错了
if (keys.Count < i + 1),而你的意思是if (keys.Count <= i + 1) -
@Ruzihm 或者实际上是为了可读性我总是写
if(i + 1 >= key.Count)或者干脆if(i == key.Count - 1)
标签: c# for-loop unity3d indexoutofrangeexception