1

2 次元配列の x 値を増やそうとしていますが、このエラーが発生し続けます。

'ReDim' can only change the rightmost dimension

配列のデータを維持しながらこれを行う必要があります。これが私のコードです。

            Dim x As Integer = 0
            Dim y As Integer = 0
            While reader.Read()
                ReDim Preserve catagoryInfo(x, 2)
                catagoryInfo(x, y) = reader.GetString(0)
                y += 1
                catagoryInfo(x, y) = reader.GetString(1)
                x += 1
                y = 0
            End While
4

1 に答える 1

3

多次元配列では、Preserve を使用すると、最後の次元のみを変更できます。他のディメンションを変更しようとすると、実行時エラーが発生します。これの一部は、ループごとに配列を Redim することを計画しているため、コードは実際には最適ではありません。ランタイムが新しい配列を割り当てるだけでなく、古い配列から新しい配列にコピーする必要があるため、preserve を使用した再縮小はさらに悪化します。

あなたの場合、このような単純なクラスを宣言する方が良いです

Public Class CategoryInfo
    Public info1 As String
    Public info2 As String
End Class

次に List(Of CategoryInfo) を使用します

Dim infos as List(Of CategoryInfo) = new List(Of CategoryInfo)()
While reader.Read()
    Dim nf As CategoryInfo = new CategoryInfo() 
    nf.info1 = reader.GetString(0)
    nf.info2 = reader.GetString(1)
    infos.Add(nf)
    ' if you like the all-in-one-line coding style you could also write the above in this way
    ' infos.Add(New CategoryInfo With {.info1=reader.GetString(0), .info2=reader.GetString(1)} )
End While

ここで、文字列配列内にデータが本当に必要な場合は、次のように書くことができます

Dim categoryInfo(infos.Count, 2) as String
for x = 0 to infos.Count -1
    categoryInfo(x,0) = infos(x).info1
    categoryInfo(x,1) = infos(x).info2
next

データを 2 回ループするため、これはまだ最適ではありませんが、少なくとも、必要に応じてデータを取得できます。

于 2012-10-30T22:07:36.833 に答える