web-dev-qa-db-fra.com

Construire un tableau multidimensionnel sur vb.net

J'essaie de construire un tableau multidimensionnel qui contiendra deux bits d'information pour chaque enregistrement dans une base de données, par exemple. identifiant, description.

C'est ce que je suis en train de faire.

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

Le problème que j'ai ici est qu'il n'aime pas la i dans mArray(i,0). Quelqu'un a des idées à ce sujet? C'est l'erreur qui est donnée Object reference not set to an instance of an object.

Merci pour toute aide.

Nalum

10
Nalum

Pourquoi ne pas plutôt utiliser List Class et Dictionary Class

Vous pouvez alors plutôt créer une liste de dictionnaires, avec la clé et valoriser les deux chaînes. La clé peut alors représenter votre clé (identifiant et description dans votre exemple, et la valeur peut être ce qui a jamais été stocké).

Quelque chose comme 

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

puis dans la boucle while quelque chose comme

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

Vous pourriez alors utiliser foreach

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

Ou un pour

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
14
Adriaan Stander

Essaye ça

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
5
Anthony

Le problème est que vous n'initialisez pas le tableau. 

Cela devrait fonctionner jusqu'à ce que i n'atteigne pas les limites définies lors de l'initialisation.

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

Mais si les limites du tableau ne sont pas connues, je suggère de suivre la suggestion d’astander .

3
Drake

Cela fonctionne pour moi:

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
Stefan Köhli