数组越界错误VB

时间:2016-12-15 12:04:37

标签: vb.net vb.net-2010

对于上一个问题的可怕措辞,我很抱歉,我半睡半醒。这次我会更加清楚。

我目前正在编写一些迷你条码扫描器和库存管理器程序的代码。我已经获得了输入并且一切都已整理好,但是我的阵列存在问题。

我目前正在尝试提取库存文件的内容并将其分类到产品表中。 这是我目前获取数据的代码:

        Using fs As StreamReader = New StreamReader("The File Path (Is private)")
        Dim line As String = "ERROR"
        line = fs.ReadLine()
        While line <> Nothing

            Dim pos As Integer = 0
            Dim split(3) As String
            pos = products.Length
            split = line.Split("|")
            productCodes(productCodes.Length) = split(0)
            products(products.Length, 0) = split(1)
            products(products.Length, 1) = split(2)
            products(products.Length, 2) = split(3)
            line = fs.ReadLine()
        End While
    End Using

我已确定文件路径确实会转到该文件。我查看了调试,发现所有数据都进入了我的&#34; split&#34;表。一旦我开始尝试传输数据,错误就会抛出。

这是我声明使用的两个表的地方:

    Dim productCodes() As String = {}
    Dim products(,) As Object = {}

有人可以解释为什么会这样吗?

提前致谢 〜水电

1 个答案:

答案 0 :(得分:0)

通过像你那样声明数组:

Dim productCodes() As String = {}
Dim products(,) As Object = {}

您正在为所有数组指定大小0,因此在循环期间,它最终会尝试访问先前未向编译器声明的位置。它与声明大小为10 Dim MyArray(10)的数组相同,并尝试访问位置11 MyArray(11) = something

您应该使用适当的大小声明它,或者在执行期间重新设置它:

Dim productCodes(10) As String

Dim productCodes() As String
Dim Products(,) As String
Dim Position as integer = 0
'code here
While line <> Nothing      
    Redim Preserve productCodes(Position)
    Redim Preserve products(2,Position)
    Dim split(3) As String
    pos = products.Length
    split = line.Split("|")
    productCodes(Position) = split(0)
    products(0,Position) = split(1)
    products(1,Position) = split(2)
    products(2,Position) = split(3)
    line = fs.ReadLine()
    Position+=1
End While