1

我正在尝试增加二维数组的 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 时只能更改最后一个维度。如果您尝试更改任何其他维度,则会发生运行时错误。您的代码的一部分确实不是最理想的,因为您计划在每个循环中重新调整您的数组。使用 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

这仍然不是很理想,因为您在数据上循环了两次,但至少它会根据需要获取数据。

于 2012-10-30T22:07:36.833 回答