for 循环中值的预递减在第一次循环时未正确递减值



我的代码中有以下 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);
}

最新更新