2010-11-23 4 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 

У меня проблема в том, что он не любит i в mArray(i,0). У кого-нибудь есть идеи об этом? Это ошибка, которую дает Object reference not set to an instance of an object.

Спасибо за любую помощь.

Nalum

ответ

13

Почему не достаточно использовать List Class и Dictionary Class

Вы можете, а затем создать список словарей, с ключом и значением обе строки. Затем ключ может представлять ваш ключ (идентификатор и описание в вашем примере, а значение может быть тем, что когда-либо было сохранено).

Что-то вроде

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

, а затем в то время как петли, как

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

Затем можно использовать Еогеасп

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

Или в течение

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

ли я тогда быть в состоянии перебрать, что при использовании для/Еогеасп? Не знаю много о .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 = ""