在VB中索引超出数组的范围

时间:2014-06-13 13:55:27

标签: asp.net vb.net

所以我试图将2D数组放入2个数组,但我不断从数组的边界中获取索引。您可能会问我为什么这样做的原因是我可以将其存储在viewstate对象中,因此我不必连续检索我的数据。

我一直试图使用的代码是:

Dim testArray As String() = {}



testArray(0) = dataArray(0, 1)

如果有办法在viewstate中存储2D数组,请告诉我。谢谢!

哦,对不起,继承了dataArray代码

 Private Function getDataArray() As Array
    Dim x As Integer
    Dim DT As DataTable
    Dim TA As New DSOldOrdersTableAdapters.TA
    DT = getOldOrders()
    ReDim dataArray(3, DT.Rows.Count - 1)
    For x = 0 To DT.Rows.Count - 1
        dataArray(0, x) = DT.Rows(x).Item("SO")
        dataArray(1, x) = DT.Rows(x).Item("Customer")
        dataArray(2, x) = DT.Rows(x).Item("ShipBy")
    Next
    Return dataArray
End Function

3 个答案:

答案 0 :(得分:1)

Dim testArray As String() = {}
testArray(0) = dataArray(0, 1)

您正在声明testArray并为其分配一个空数组。因为数组是零长度,所以 没有索引0,因此尝试分配给testArray(0)会导致索引超出范围异常。

您需要重新调整testArray变量,或更改您的作业:

Dim testArray As String() = {}
ReDim testArray(0)
testArray(0) = dataArray(0, 1)
'or
Dim testArray As String() = {dataArray(0,1)}

答案 1 :(得分:1)

声明

 Dim testArray As String() = {}

创建了一个维度设置为零的字符串数组

因此,如果没有至少一个元素的尺寸,testArray就没用了 写作

testArray(0) = dataArray(0, 1)

导致索引超出范围的异常

可能你需要一个数据行相同长度的数组 但是,为什么在这种情况下使用数组的所有努力呢? List(Of String)是一个更好的解决方案

Dim testValues = new List(Of String)()
testValues.Add(dataArray(0,1))

通过这种方式,你不需要知道testArray应该有多大,你可以在每个需要数组的地方使用List作为数组

Dim soValue = testValues(0) 

testValues.ToArray()

答案 2 :(得分:0)

您遇到的错误是因为,您尝试引用的元素不在数组中。数组的索引从0开始,因此请始终尝试确保,您将最后一个元素引用为(maxElements - 1)。否则会导致错误,你会看到这个错误。