Построение многомерного массива в vb.net - PullRequest
10 голосов
/ 23 ноября 2010

Я пытаюсь создать многомерный массив, который будет содержать два бита информации для каждой записи в базе данных, например, id, описание.

Это то, чем я сейчас занимаюсь.

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

Ответы [ 5 ]

14 голосов
/ 23 ноября 2010

Почему бы не использовать Класс списка и Класс словаря

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

Что-то вроде

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
5 голосов
/ 18 декабря 2012

Попробуйте это

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
3 голосов
/ 23 ноября 2010

Проблема в том, что вы не инициализируете массив.

Это должно работать, пока 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.

0 голосов
/ 21 ноября 2018

Это работает для меня:

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

values.Add(New Dictionary(Of String, String)() From {{"quarter", q1.ToString}, {"year", y1.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q2.ToString}, {"year", y2.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q3.ToString}, {"year", y3.ToString}})
values.Add(New Dictionary(Of String, String)() From {{"quarter", q4.ToString}, {"year", y4.ToString}})

For Each value As Dictionary(Of String, String) In values
    Dim quarter As String = value("quarter")
    Dim year As String = value("year")
    Debug.Print(quarter & "/" & year)
Next
0 голосов
/ 23 июня 2017

Исправьте это

Dim mArray(,) As String = ""
...