我的代码中有以下 for 循环(使用 C#(
for (int i = 150; i >= 75; --i)
{
print("I holds " + i);
images[i].gameObject.SetActive(false);
}
尝试运行列表中的每个项目,并禁用该对象。该列表包含 150 个对象(但由于它从值零开始,因此最终参考位置为 149(
所以,我认为 for 循环是遍历它们的好方法。然而,我尝试在循环的第一次运行时将 i 的值减小到 149,但它在第一次运行时仍然将值 150 传递到循环中,这会引发预期的("参数超出范围"(错误。
任何人都可以弄清楚为什么减少的值没有正确传递到循环中?
我尝试在第一次运行循环之前和之后减少它,但两次它都将值 150 传递到循环中。
我觉得这应该是一个相对简单的问题,但它并没有像我预期的那样工作!
for (int i = 10; i >= 0; --i)
与
for (int i = 10; i >= 0; i--)
i
在第一个循环中不会减少/增加。这适用于多种语言。只需从 149 开始即可工作。
回答"任何人都可以弄清楚为什么减少的值没有正确传递到循环?
另一种在不关心实际索引的情况下遍历数组所有项目的方法是使用 foreach
语句:
foreach(var image in images)
{
image.gameObject.SetActive(false);
}
如果要使用 for
语句。我建议你这样写:
for(var i=0; i<images.Length; i++)
{
image[i].gameObject.SetActive(false);
}
这样做,您非常有信心不会超出阵列的大小。您从索引为 0 的位置的元素开始,然后读取存储在数组中的最后一个项目,位于 images.Length-1
的位置。
更新如果您只想更新数组中的前 75 个项目(其中 75 是数组中总项目的一半(,您可以尝试以下操作:
for(var i=0; i<images.Length/2; i++)
{
image[i].gameObject.SetActive(false);
}