嗨我有一个for循环问题.
看起来像这样
for (int i = 0; i < ObjectManager.Instance.Objects.Count; i++)
{
if (ObjectManager.Instance.Objects[i] is Asteroid)
{
ObjectManager.Instance.Objects.Remove(ObjectManager.Instance.Objects[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
但是当我移除对象时,计数会变短,这会导致循环过早结束.有没有办法在没有一堆额外循环的情况下做到这一点.
你为什么不向后循环?
// Just change the order from Count - 1 down to 0
for (int i = ObjectManager.Instance.Objects.Count - 1; i >= 0; --i)
{
if (ObjectManager.Instance.Objects[i] is Asteroid)
{
ObjectManager.Instance.Objects.Remove(ObjectManager.Instance.Objects[i]);
}
}
Run Code Online (Sandbox Code Playgroud)
如果你必须循环前进(例如,如果实例应该按创建顺序删除它们,因为它们彼此依赖),你可以用这种方式修改for循环:
for (int i = 0; i < ObjectManager.Instance.Objects.Count;) // <- No increment here
if (ObjectManager.Instance.Objects[i] is Asteroid)
ObjectManager.Instance.Objects.Remove(ObjectManager.Instance.Objects[i]);
else
i += 1; // <- Increment should be here!
Run Code Online (Sandbox Code Playgroud)
另一种可能性是Linq:
ObjectManager.Instance.Objects.RemoveAll(item => item is Asteroid);
Run Code Online (Sandbox Code Playgroud)