2010-11-23 15 views
9

Estoy intentando crear una matriz multidimensional que contendrá dos bits de información para cada registro en una base de datos, p. id, descripción.Crear una matriz multidimensional en vb.net

Esto es lo que estoy haciendo actualmente.

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 

El problema que tengo aquí es que no le gusta el i en mArray(i,0). Alguien tiene alguna idea sobre esto? Este es el error que se da Object reference not set to an instance of an object.

Gracias por toda la ayuda.

Nalum

Respuesta

13

¿No sería mejor hacer uso de List Class y Dictionary Class

Usted puede entonces más bien crear una lista de diccionarios, con la clave y el valor de ambas cadenas. La clave puede representar su clave (identificación y descripción en su ejemplo, y el valor puede ser lo que haya sido almacenado).

Algo así como

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

y luego en el bucle while algo así como

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

A continuación, podría utilizar foreach

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

O una de

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

¿Me entonces será capaz de bucle sobre que el uso de/foreach? No sé mucho sobre .net fue lanzado en este proyecto. – Nalum

+0

Consulte la respuesta editada a su pregunta. –

+0

Gracias a un espectador, le dará una oportunidad, parece que hará el truco. – Nalum

3

El problema es que no está inicializando la matriz.

Esto debería funcionar, hasta que i no alcance los límites establecidos en la inicialización.

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 

Pero si no se conocen los límites de la matriz que sugieren seguir astander's suggestion.

+0

Desafortunadamente los límites son desconocidos, me cansé de hacer 'Dim mArray (, 2)' pero me dijeron que pusiera un número para la primera parte de la matriz. – Nalum

5

probar este

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

correcta por

Dim mArray(,) As String = "" 
Cuestiones relacionadas