4

これは、私がこれをどのように書いたかという点でかなり根本的な問題かもしれませんが、助けが必要です: 私は 2 つのフィールドを持つパブリック クラスとして定義されたオブジェクトを持っています。両方とも文字列です。

Public Class mp
    Dim _fg As String
    Dim _scode As String

    Property fg As String
        Get
            Return _fg
        End Get
        Set(ByVal value As String)
            _fg = value
        End Set
    End Property
    Property scode As String
        Get
            Return _scode
        End Get
        Set(ByVal value As String)
            _scode = value
        End Set
    End PropertyEnd Class

次に、これらの配列を定義します。

Dim mps As New List(Of mp)()

次に、ループで、最初にリストをクリアした後、リストへの追加を開始します。

        Dim mpholder As New mp
        cmd.CommandText = 'Query here
        cmd.ExecuteNonQuery()
        reader = cmd.ExecuteReader

        mp.Clear()


        Try

            Do While reader.Read()
                    mpholder.fg = ""
                    mpholder.scode = ""

                    mpholder.fg = reader(0)
                    mpholder.scode = reader(1)

                    mps.Add(mpholder)
            Loop

        Catch ex As Exception
            MP_Res.Text = "error"
        End Try

ある段階でエラーになってキャッチにたどり着いた場合、リスト「mp」には同じ数のエントリが含まれていますが、それらはすべて空です

4

2 に答える 2

2

同じアイテムをリストに追加し続けます。

線を移動してみる

Dim mpholder As New mp

読み取り/追加ループ内:

Do While reader.Read()
  Dim mpholder As New mp

  mpholder.fg = reader(0)
  mpholder.scode = reader(1)

  mps.Add(mpholder)
Loop

mpは として宣言されているためclass、参照型であることを意味します。つまり、型の変数はmpオブジェクト自体ではなく、オブジェクトへの参照のみです。だから私がするなら:

Dim mp1 As New mp
Dim mp2 = mp1

2 つのオブジェクトではなく、1 つmpのオブジェクトへの 2 つの参照がありmpます。オブジェクトの 1 つのプロパティを変更すると、その変更は各参照を通じて表示されます。

mp1.fg = "Test" 
mp2.fg = "Test2";
Console.WriteLine(mp1.fg) ' "Test2"
于 2013-08-19T14:29:41.077 に答える
1

上記を試してください。オブジェクトをループに作成するだけです。

    cmd.CommandText = 'Query here
    cmd.ExecuteNonQuery()
    reader = cmd.ExecuteReader




    Try

        Do While reader.Read()
                Dim mpholder As New mp


                mpholder.fg = reader(0)
                mpholder.scode = reader(1)

                mps.Add(mpholder)
        Loop

    Catch ex As Exception
        MP_Res.Text = "error"
    End Try
于 2013-08-19T14:29:07.067 に答える