2010-11-23 32 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 = ""