web-dev-qa-db-ja.com

vb.netでの多次元配列の構築

私はデータベースの各レコードの2ビットの情報を保持する多次元配列を構築しようとしています。 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._で示されるエラーです

助けてくれてありがとう。

ナルム

10
Nalum

List Class および Dictionary Class を使用しないのはなぜですか

むしろ、キーと値の両方の文字列を使用して、辞書のリストを作成できます。キーはキーを表すことができます(例では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 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

これを試して

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

問題は、アレイを初期化していないことです。

これは、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

しかし、配列の制限が不明な場合は、従うことをお勧めします アスタンダーの提案 .

3
Drake

これは私にとってはうまくいきます:

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