0

vb .net コレクションに 2 つの要素を追加しました。デバッグすると、.count = 2 が表示されます。

コレクション内の要素を監視すると、通常、ゼロ インデックスの最初の空の要素が表示され、次に追加した 2 つの要素が表示されます。

ここに画像の説明を入力

問題は、コレクションを For Each Next ループで反復すると、空の要素が反復され、最後の要素が反復されないことです。

これが構造体の宣言方法です

Structure bstCategory
    Dim categoryCode As String
    Dim categoryVersion As String
End Structure

これは、コレクションがどのように入力されるかです

 With ci.tItem.information
    .categories = New Collection
    Dim additionalClassification As bstCategory
    additionalClassification.categoryCode = "1"
    additionalClassification.categoryVersion = "A"
    .categories.Add(additionalClassification)
    additionalClassification.categoryCode = "2"
    additionalClassification.categoryVersion = "B"
    .categories.Add(additionalClassification)
End With

これがコレクションの反復方法です

For Each category As bstCategory In ci.tItem.information.categories
        ValidateCategory(categorycode)
Next

私は何を間違っていますか?

4

1 に答える 1

0

問題を再現できませんでした。vs2010 target .net 2.0 で vb.net を使用すると問題なく動作します。

ここで私があなたのコードに基づいて試したこと:

Module Module1

    Structure bstCategory
        Dim Code As String
        Dim Version As String
    End Structure

    Sub Main()

        Dim categories As New Collection()
        Dim c As New bstCategory
        c.Code = "1"
        c.Version = "1"
        categories.Add(c)
        categories.Add(c)

        For Each category As bstCategory In categories
            Console.WriteLine(category.Code)
        Next

    End Sub

End Module

For Each が奇妙な動作をしている場合は、代わりに For を使用するように変更できます。

For i As Integer = 1 To categories.Count
   Console.WriteLine(categories(i).Code)
Next

とにかく、あなたが直面していることは非常に奇妙です。私が提案するのは、Google でインデックス 0 のテキストを探すことです。私はそれを行いましたが、それについて話しているページがいくつかあるので、あなたの答えがそこにあるかもしれません.

Google for: 「1 ベースの配列に合わせて調整するための空のプレースホルダー」

それが役立つことを願っています!

これは、コレクション内の 0 から 2 までの 3 つの値を示す図ですが、反復すると、1 を 2 回出力するのは 2 回だけです。

ここに画像の説明を入力

于 2013-01-18T13:22:48.090 に答える