2011-09-22 19 views
0

我有两个结构vb.net结构的ArrayList的2003具有一个ArrayList

公共结构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 

我初始化它们在子

暗淡MyResearchDataAList As New ArrayList Dim MyResearchData As myResearchData MyResearchData.arraylistRData =新的ArrayList 昏暗MyResearchSubData作为myResearchSubData

我有myResearchSubData的ArrayList是MyResearchData.arraylistRData并加入它里面MyResearchDataAList。但是当我清除MyResearchData.arraylistRData时,MyResearchDataAList内的数组列表也被清除。我认为一旦将它添加到MyResearchDataAList中,它将保存数组列表,但它也被解锁。以下是我所做的过程。

MyResearchSubData.recordingDate = Date.Parse(日期) MyResearchSubData.book =图书 MyResearchSubData.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

发生这种情况是因为它实际上是添加到数组列表中的相同项目,因为它们是通过引用添加的。你想实际添加每个项目的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 
+0

d先生..你可以给我克隆一个ArrayList到另一个 – gibz357

+0

肯定的示例代码,但你并不需要克隆ArrayList中,而是在它的项目。实际上,因为你使用了一个结构,所以这不起作用,所以你有几个选项。用样品编辑上面。 – Jay

相关问题