2010-11-23 31 views
9

我试图构建一个多维数组,它将为数据库中的每条记录保存两位信息id,说明。在vb.net中构建一个多维数组

这就是我目前正在做的。

Dim mArray(,) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
End While 

我这里的问题是,它不喜欢在mArray(i,0)i。任何人对此有任何想法?这是给出的错误Object reference not set to an instance of an object.

感谢您的任何和所有帮助。

Nalum

回答

13

为什么不情愿利用List ClassDictionary Class

你可以而不是创建一个字典列表,用键和值两个字符串。然后密钥可以表示您的密钥(您的示例中的ID和描述,并且该值可以是曾经存储的值)。

喜欢的东西

Dim values As New List(Of Dictionary(Of String, String))() 

,然后在while循环类似

values.Add(New Dictionary(Of String, String)() From { _ 
    {"id", cmdReader.Item("id")} _ 
}) 
values.Add(New Dictionary(Of String, String)() From { _ 
    {"description", cmdReader.Item("description")} _ 
}) 

然后,您可以使用的foreach

For Each value As Dictionary(Of String, String) In values 
    Dim id As String = value("id") 
    Dim description As String = value("description") 
Next 

或A

For i As Integer = 0 To values.Count - 1 
    Dim value As Dictionary(Of String, String) = values(i) 
    Dim id As String = value("id") 
    Dim description As String = value("description") 
Next 
+0

我然后能遍历,使用了/的foreach?对这个项目不太了解.net被扔进了这个项目。 – Nalum 2010-11-23 11:08:43

+0

请参阅已编辑的问题答案。 – 2010-11-23 11:12:09

3

问题是你没有初始化数组。

这应该工作,直到i将达不到在初始化中设置的限制。

Dim mArray(100,100) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
End While 

但是,如果不知道数组限制,我建议按照astander's suggestion

5

试试这个

Dim mArray(1,1) As String 
Dim i As Integer = 0 
While cmdReader.Read() 
    mArray(i,0) = cmdReader.Item("id") 
    mArray(i,1) = cmdReader.Item("description") 
    i = i + 1 
    ReDim Preserve mArray(i,1) 
End While 
-2

纠正此错误。

Dim mArray(,) As String = ""