使用.NET ArrayList .RemoveAt()不会重新计算计数权限

时间:2012-10-02 19:28:44

标签: .net vb.net arraylist

我在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

1 个答案:

答案 0 :(得分:1)

我不知道这是否与您的问题有关,但您从零开始计算并删除对象,然后递增计数器。通过这样做,您实际上正在跳过列表中的所有其他项目。如果您有4个元素,并且您删除了项目0,并且计数器= 0,则您要检查的下一个项目是项目0,而不是项目1,因为您已删除项目0以及项目1现在是项目0。感?您需要更改处理计数器变量的方式,或者从数组末尾开始计数并倒计时。至于最后有太多项目,只需输入一个Debug.WriteLine,在你移动时打印出你的数组计数,你应该看到计数下降,而不是向上。如果数组正在增长,那么你有没有发布的代码导致了这一点。