我有两个结构
公共结构myResearchData
Public batchName As String
Public arraylistRData As ArrayList
End Structure
Public Structure myResearchSubData
Public researchDescription As String
Public recordingDate As Date
Public book As String
Public page As String
Public year As String
Public fee As String
End Structure
我在子
中初始化它们Dim MyResearchDataAList As New ArrayList Dim MyResearchData作为myResearchData MyResearchData.arraylistRData = New ArrayList Dim MyResearchSubData as myResearchSubData
我有一个myResearchSubData的arraylist,它是MyResearchData.arraylistRData并将其添加到MyResearchDataAList中。但是当我清除了MyResearchData.arraylistRData时,MyResearchDataAList中的arraylist也被清除了。我认为一旦它被添加到MyResearchDataAList它将保持arraylist但它也是clered。以下是我所做的过程。
MyResearchSubData.recordingDate = Date.Parse(Date) MyResearchSubData.book = Book MyResearchSubData.page = Page MyResearchSubData.year =年份 MyResearchSubData.fee =费用
将数据放入MyResearchSubData
的结构中MyResearchData.arraylistRData.Add(MyResearchSubData)
在MyResearchData.arraylistRData
中添加了它MyResearchDataAList.Add(MyResearchData)
在MyResearchDataAList
中添加了它MyResearchData.arraylistRData.Clear()
清除了要放入的新数据的MyResearchData.arraylistRData,但它也清除了MyResearchDataAList中的arraylist,并且没有使用arraylist的内容
提前感谢那些可以帮助我解决这个问题的人
答案 0 :(得分:0)
这种情况正在发生,因为它实际上是添加到数组列表中的相同项目,因为它们是通过引用添加的。您希望实际将每个项目的COPY添加到arrayList。
我一般认为最简单的方法就是在循环中添加对象的克隆。
要做到这一点,您可能需要实现ICloneable才能获得正确的副本。但是,在myResearchSubData的级别上,您可以使用memberwiseClone方法。
如果您将类更改为类而不是结构,则可以像这样使用克隆:
Public Class myResearchSubData
Implements ICloneable
Public researchDescription As String
Public recordingDate As Date
Public book As String
Public page As String
Public year As String
Public fee As String
Public Function Clone() As Object Implements System.ICloneable.Clone
Return Me.MemberwiseClone
End Function
End Class
然后,您需要遍历myResearchSubData的原始列表,并将其克隆添加到第二个列表中。类似的东西:
For Each item as myResearchSubData in MyResearchData.arraylistRData
MyResearchDataAList.Add(CType(item.Clone, myResearchSubData))
Next
如果你想继续使用这些结构,那么我将使用相同的循环类型,并创建一个创建新的myResearchSubData的函数,并将原始数据复制到新的。
For Each item as myResearchSubData in MyResearchData.arraylistRData
MyResearchDataAList.Add(CloneStructure(item))
Next