for循环中的值的预先递减不能正确地减少第一个循环上的值

时间:2017-11-12 16:24:15

标签: c# loops unity3d

我的代码中有以下for循环(使用C#)

for (int i = 150; i >= 75; --i)
{
    print("I holds " + i);
    images[i].gameObject.SetActive(false);
}

尝试遍历列表中的每个项目,并禁用该对象。该列表包含150个对象(但由于它从零开始,最终引用位置为149)

所以,我认为for循环是迭代它们的好方法。然而,我尝试在第一次运行时将i的值减小到149,但它仍然在第一次运行中将值150传递到循环中,这会抛出预期的("参数超出范围& #34;)错误。

有人能解决为什么减少的值没有正确传递给循环吗?

我尝试在第一次循环运行之前和之后减少它,但两次都将值150传递给循环。

我认为这应该是一个相对简单的问题需要解决,但它没有像我预期的那样工作!

2 个答案:

答案 0 :(得分:3)

for (int i = 10; i >= 0; --i)

相同
for (int i = 10; i >= 0; i--)

i在第一个循环中不会减少/增加。这适用于多种语言。从149开始就可以了。

答案"任何人都可以解决为什么减少的值没有正确传递到循环中?"

答案 1 :(得分:2)

循环遍历数组中所有项而不关心实际索引的另一种方法是使用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);
}