这可能是我如何写这篇文章的一个相当基本的问题,但我需要一些帮助:
我有一个 odject 定义为具有两个字段的公共(public)类,两个字段

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”中的条目数相同,但它们都是空的

最佳答案

您不断将相同的项目添加到列表中。

尝试移动线

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

我不会有两个 mp 对象,我会有两个对单个 mp 对象的引用。如果我更改了对象的一个​​属性,该更改将通过每个引用可见。
mp1.fg = "Test"
mp2.fg = "Test2";
Console.WriteLine(mp1.fg) ' "Test2"

关于VB.Net 对象列表在错误后意外清除,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18316281/

10-11 22:22
查看更多