在vb.net中构建多维数组

10

我正在尝试构建一个多维数组,它将保存数据库中每个记录的两个信息,例如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

我遇到的问题是它不喜欢mArray(i,0)中的i。有人对此有任何想法吗?这是给出的错误:Object reference not set to an instance of an object.

感谢任何和所有的帮助。

Nalum

5个回答

14

为什么不使用列表类字典类呢?

您可以创建一个包含键和值都是字符串的字典列表。键可以代表您的键(例如,在您的示例中为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

或者一个for

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

那么我能用for/foreach循环遍历它吗?我对.NET不是很了解,只是因为这个项目被投入其中。 - Nalum
谢谢 astander,我会试一下,看起来它能解决问题。 - Nalum
需要稍微调整一下,但我已经让它正常工作了,谢谢 astander。 - Nalum
有什么想法如何对此进行排序吗?http://stackoverflow.com/questions/15819207/how-to-sort-a-list-of-dictionary-entries-in-vb-net - bgmCoder
1
对我来说,它显示为“字典中没有提供的键”。 - Cary Bondoc

6

试试这个

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
问题在于您没有初始化数组。
这应该有效,直到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的建议


不幸的是,限制是未知的,我尝试使用“Dim mArray(,2)”来做,但被告知要在数组的第一部分中放置一个数字。 - Nalum

0
这对我有效:
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

-2

通过修正它

Dim mArray(,) As String = ""

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接