所以我试图将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
答案 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)
。否则会导致错误,你会看到这个错误。