我在使用Class属性中的List时遇到问题。 这是我的班级:
Public Class SourceData
Private _datafiles As New List(Of String)
Public Property datafiles() As List(Of String)
Get
Return _datafiles
End Get
Set(value As List(Of String))
_datafiles = value
End Set
End Property
End Class
到目前为止,这么好。现在我想在我的程序中使用它:
Public filename_data As New List(Of SourceData)
Private Sub loadData()
Dim currentSourceData As New SourceData
currentSourceData.datafiles.Add("A")
currentSourceData.datafiles.Add("B")
currentSourceData.datafiles.Add("C")
MsgBox(currentSourceData.datafiles.Count) 'Returns 3
filename_data.Add(currentSourceData)
MsgBox(filename_data(0).datafiles.Count) 'Returns 0
end sub
第一个消息框将返回正确数量的数据文件条目:3 但是,第二个消息框将返回0.不知何故,数据文件列表在途中丢失了?无论我怎么做,我都无法找到问题的解决方案。
答案 0 :(得分:0)
您正在添加' currentSourceData'列表三次:
filename_data.Add(currentSourceData)
' currentSourceData'始终是相同的实例 - 您只是将其添加到列表中3次,因此您当然会为每个重复实例获得相同的计数。这个数字将是3,因为你的每个'清除字符串列表然后添加3个字符串后发生循环。
另一种看待这种情况的方法是你的List(Of SourceData)在' loadData'的末尾有3个条目。 - 并且每个条目指向同一个对象。这里没有复制,这是我的预期。
如果您想在添加后使对象独立,则需要添加' currentSourceData'的克隆。列表。
答案 1 :(得分:0)
这是我的最终代码,多亏了你的提示我发现了我的问题:
Public filename_data As New List(Of SourceData)
Private Sub loadData()
Dim currentSourceData As New SourceData
'first Item:
currentSourceData.datafiles.Add("A")
MsgBox(currentSourceData.datafiles.Count) 'Returns 1
filename_data.Add(currentSourceData)
currentSourceData = New SourceData
'second Item:
currentSourceData.datafiles.Add("A")
currentSourceData.datafiles.Add("B")
MsgBox(currentSourceData.datafiles.Count) 'Returns 2
filename_data.Add(currentSourceData)
currentSourceData = New SourceData
'third Item:
currentSourceData.datafiles.Add("A")
currentSourceData.datafiles.Add("B")
currentSourceData.datafiles.Add("C")
MsgBox(currentSourceData.datafiles.Count) 'Returns 3
filename_data.Add(currentSourceData)
For Each x As SourceData In filename_data
MessageBox.Show(x.datafiles.Count) 'Will Return 1.. 2.. 3
Next
end sub