-2

我正在使用ArrayListVB.Net 中的 300 多条记录。当我处理它们时,我删除了指定索引处的记录,因为它们没有按顺序存储。Arraylist我的问题是,当我在使用之前第一次查看计数时,计数显示为RemoveAt()373,但使用RemoveAt()几次后,我注意到计数上升到 425 左右。

根据我对 MSDN 参考页面的理解ArrayList.RemoveAt(),该方法应删除指定索引处的元素并将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() > 0 时运行。

4

1 回答 1

1

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

于 2012-10-02T20:58:45.660 回答