在for循环期间从数组中删除一个术语

时间:2014-04-16 01:45:36

标签: arrays vb.net for-loop

我一直在创建一个系统,用于存储持续指定持续时间的对象,然后自行删除。但是,我在查找如何在for循环运行时从数组中删除过期的项目时遇到了一些麻烦(以最大限度地减少数组中的额外迭代)

这是我到目前为止所做的。列表中的术语标有一个布尔值,表示它们已完成。

For i = 0 To VisualEffects.Count - 1 Step 1 VisualEffects(i).Update(gt) VisualEffects(i).Draw(sb, Pos, Cam) If VisualEffects(i).CD.isExpired() Then VisualEffects.RemoveAt(i) i = -1 End If

    Next

Next

为什么会产生错误?如何从数组中删除一个术语,继续迭代循环的其余部分?

此致

战神

2 个答案:

答案 0 :(得分:2)

该行

i = -1

i设置为-1,导致For循环终止。

如果可以,请颠倒循环的顺序,以便从最后一个数组元素开始并倒计时。这使得删除逻辑变得更加直接。

答案 1 :(得分:2)

.NET数组是固定大小的,因此您根本无法从数组中删除元素。您可以更改元素的值,因此可以将元素设置为Nothing以删除它引用的对象,但元素仍然存在。如果您阅读了Array类的MSDN文档,那么您将看到RemoveAt方法因此而抛出NotSupportedException。

如果您实际上使用的是集合而不是数组,那么您可以调用RemoveAt但是您需要从最后一个索引循环到第一个索引而不是从头到尾循环。这样,删除项目不会影响您尚未访问的项目的索引。