这可能是我如何写这篇文章的一个相当基本的问题,但我需要一些帮助:
我有一个 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/