Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用.NET ArrayList.RemoveAt()不会重新计算正确的计数_.net_Vb.net_Arraylist - Fatal编程技术网

使用.NET ArrayList.RemoveAt()不会重新计算正确的计数

使用.NET ArrayList.RemoveAt()不会重新计算正确的计数,.net,vb.net,arraylist,.net,Vb.net,Arraylist,我在VB.Net中使用的是一个ArrayList,其中有300多条记录。在处理它们时,我会删除指定索引处的记录,因为它们没有按顺序存储。我的问题是,当我在使用RemoveAt()之前第一次查看Arraylist的计数时,计数是373,但在使用RemoveAt()两次之后,我注意到计数上升到425左右 根据我对ArrayList.RemoveAt()的MSDN参考页的理解,该方法应删除指定索引处的元素,并将ArrayList计数减少一 如果有人遇到这个问题或有任何线索,为什么它这样做,请让我知道

我在VB.Net中使用的是一个
ArrayList
,其中有300多条记录。在处理它们时,我会删除指定索引处的记录,因为它们没有按顺序存储。我的问题是,当我在使用
RemoveAt()
之前第一次查看
Arraylist
的计数时,计数是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
While(SimsRun.Count>0)
计数器=0
"创新纪录"
While(计数器

这其中的外部循环将在SimsRun.Count()>0时运行。

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

这不应该发生(除非有其他东西正在添加元素)。你能展示再现行为的代码吗?需要一个SSCCE()这个程序太复杂了,我不能只发送显示它的点。但是我可以包含在指定位置删除元素的代码部分。如果还有任何问题,请告诉我。当我想在批处理文件中查找特定记录时,此循环将关闭。一旦找到,它就被处理,然后返回到这个循环,在这个循环中,计数器被初始化回零,然后再次开始搜索。抱歉,我忘记在循环之前包含计数器初始化器。