我在VB.Net中使用ArrayList
,其中包含300多条记录。当我处理它们时,我删除了指定索引处的记录,因为它们没有按顺序存储。我的问题是,在我使用Arraylist
之前我首先查看RemoveAt()
的计数时,计数显示为373,但在使用RemoveAt()
几次之后我注意到计数会上升到425。
根据我对ArrayList.RemoveAt()
的MSDN参考页的理解,该方法应删除指定索引处的元素,并将ArrayList
计数减一。
如果有人遇到此问题或有任何线索,请告知我们。
更新 arraylist中的每个元素都是一个对象的实例。
更新这是在arraylist中找到要提取然后删除它的元素的代码。
While (SimsRun.Count > 0)
counter = 0
'Get a new record
While (counter < SimsRun.Count)
tempSim = SimsRun(counter)
If tempSim.BatchIndex = (simToFind - 1) Then
SimsRun.RemoveAt(counter)
Exit While
End If
counter = counter + 1
End While
Process Record
.
.
.
.
End While
它所在的外部循环将在SimsRun.Count()&gt;运行时运行。 0
答案 0 :(得分:1)
我不知道这是否与您的问题有关,但您从零开始计算并删除对象,然后递增计数器。通过这样做,您实际上正在跳过列表中的所有其他项目。如果您有4个元素,并且您删除了项目0,并且计数器= 0,则您要检查的下一个项目是项目0,而不是项目1,因为您已删除项目0以及项目1现在是项目0。感?您需要更改处理计数器变量的方式,或者从数组末尾开始计数并倒计时。至于最后有太多项目,只需输入一个Debug.WriteLine,在你移动时打印出你的数组计数,你应该看到计数下降,而不是向上。如果数组正在增长,那么你有没有发布的代码导致了这一点。