-2

ArrayList300以上のレコードで埋め尽くされているVB.Netで使用しています。それらを処理するときに、順番に保存されていないため、指定されたインデックスのレコードを削除します。私の問題は、Arraylist使用する前のカウントを最初に見るRemoveAt()と373と表示されますが、数RemoveAt()回使用した後、カウントが425前後に上がることに気づきました。

のMSDNリファレンスページの理解から、ArrayList.RemoveAt()メソッドは指定されたインデックスの要素を削除し、ArrayListカウントを1つ減らす必要があります。

誰かがこの問題に遭遇したか、なぜそれがこれをしているのかについて何か手がかりがあれば、私に知らせてください。

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 を削除し、カウンター = 0 の場合、次にチェックするアイテムはアイテム 1 ではなくアイテム 0 です。検出?カウンター変数の処理方法を変更するか、配列の最後から開始してカウントダウンする必要があります。最後にアイテムが多すぎる限り、移動するにつれて配列カウントを出力する Debug.WriteLine をスローするだけで、カウントが上がるのではなく下がることがわかります。配列が増加している場合は、これを引き起こしている投稿していないコードがあります。

于 2012-10-02T20:58:45.660 に答える