我的代码中有以下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传递给循环。
我认为这应该是一个相对简单的问题需要解决,但它没有像我预期的那样工作!
答案 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);
}