如何在VB.NET中将一个数组的值复制到另一个数组?

如何在VB.NET中将一个数组的值复制到另一个数组?,vb.net,arrays,Vb.net,Arrays,我的代码从数据库中读取值,然后将它们放入数组中。我想把这个数组的值复制到另一个数组,但是当我尝试时,它总是抛出一个异常 对象引用未设置为对象的实例 我似乎看不出有什么不对。我如何解决这个问题 我的代码在这里: ' Read values from a database and assign them to an array Dim counter As Integer = 0 Dim reader As MySqlDataReader reader = cmd.E

我的代码从数据库中读取值,然后将它们放入数组中。我想把这个数组的值复制到另一个数组,但是当我尝试时,它总是抛出一个异常

对象引用未设置为对象的实例

我似乎看不出有什么不对。我如何解决这个问题

我的代码在这里:

    ' Read values from a database and assign them to an array
    Dim counter As Integer = 0
    Dim reader As MySqlDataReader
    reader = cmd.ExecuteReader()
    Dim dataarray As string()

    While reader.Read()
        Dim datatoAdd As string = reader.GetValue(1) & ", " & _
                                  reader.GetValue(2) & ", " & _
                                  reader.GetValue(3) & ", " & _
                                  reader.GetValue(6) & ", " & _
                                  reader.GetValue(7) & ", " & _
                                  reader.GetValue(8) & ", " & _
                                  reader.GetValue(9) & ", " & _
                                  reader.GetValue(10) & ", " & _
                                  reader.GetValue(11)

        dataarray(counter) = datatoAdd
    End While

    reader.Close()
    connection.Close()
    MessageBox.Show('Data added successfully)

Catch ex As Exception
    MessageBox.Show(ex.Message)

VB数组从0开始,而不是从1开始,不是吗?这可能是问题所在吗

请参见您的声明

Dim dataarray As string()
刚刚声明的dataarray——您定义了
dataarray
可以指向字符串数组。目前,它没有指向任何地方。您必须创建一个新数组并将其分配给
dataarray

最简单的方法是在声明中指定数组的大小:

Dim dataarray(UPPER_BOUND) As String
这将创建一个索引为0到上界(即上界+1个元素)的数组。(如果您还不知道上限,请不要使用数组,而是使用
列表(字符串)
。)

更多详情:

  • MSDN:

编辑:您在注释中声明不知道数组的大小。在这种情况下,您根本不应该使用数组根据定义,数组是固定大小的数据结构。(是的,有
ReDim Preserve
,但这仍然不是一个好主意。)


相反,请使用可调整大小的数据结构,例如。如果你真的需要数组,你可以在以后使用。

@Staypa:你将
Dim dataarray替换为String()
Dim dataarray(5)替换为String
(如果你希望数组有6个元素,否则,用你想要的上限替换5)。这是一个数据库,所以我不知道数组的大小。我不能确定size@Staypa:那么您不应该使用数组。使用可调整大小的数据结构,例如。如果您真的需要数组,可以在以后使用。@Staypa:ArrayList是一个旧的数据结构。如果可以,请使用
列表(字符串)
。它与ArrayList具有相同的功能,但也是类型安全的。@Staypa:但您要求的是数组,而不是ArrayList。;-)使用
列表(整型)
(或任何您的值的数据类型),
Max()
应该在那里工作。是否可能在While循环中缺少
计数器+=1
?这不是本例中的问题。海因茨说得对。(顺便说一句,我没有投反对票)我真的很好奇,我真的应该把这个作为一个评论,因为它不是一个完整的答案。事后诸葛亮是件好事。尽管如此,它可能对一些人有用:)通常他们从零开始。但如果你把它当作从1开始,你会把它搞砸