具有Arraylist的结构的vb.net 2003 Arraylist

具有Arraylist的结构的vb.net 2003 Arraylist,vb.net,struct,arraylist,Vb.net,Struct,Arraylist,我有两个结构 公共结构myResearchData 我在一个子系统中初始化它们 Dim MyResearchDataList作为新的ArrayList 将MyResearchData设置为MyResearchData MyResearchData.arraylistRData=新的ArrayList 将MyResearchSubData设置为MyResearchSubData 我有一个myResearchSubData的arraylist,它是MyResearchData.arraylistRD

我有两个结构

公共结构myResearchData

我在一个子系统中初始化它们

Dim MyResearchDataList作为新的ArrayList 将MyResearchData设置为MyResearchData MyResearchData.arraylistRData=新的ArrayList 将MyResearchSubData设置为MyResearchSubData

我有一个myResearchSubData的arraylist,它是MyResearchData.arraylistRData,并将其添加到MyResearchDataList中。但是当我清除MyResearchData.arraylistRData时,MyResearchDataList中的arraylist也被清除。我认为,一旦它被添加到MyResearchDataList中,它将保留arraylist,但它也被记录。下面是我所做的过程

MyResearchSubData.recordingDate=Date.ParseDate MyResearchSubData.book=book MyResearchSubData.page=第页 MyResearchSubData.year=年份 MyResearchSubData.fee=费用

将数据放入MyResearch子数据的结构中

MyResearchData.arraylistRData.AddMyResearchSubData

在MyResearchData.arraylistRData中添加了它

MyResearchDataList.AddMyResearchData

在MyResearchDataList中添加了它

MyResearchData.arraylistRData.Clear

清除了MyResearchData.arraylistRData以放入新数据,但它也清除了MyResearchDataList中的arraylist,并且没有旧的arraylist内容


提前感谢那些能够帮助我解决此问题的人,因为实际上,添加到数组列表中的项目与通过引用添加的项目相同。您希望实际将每个项目的副本添加到arrayList中

我通常认为最简单的方法就是在循环过程中添加对象的克隆

为此,您可能需要实现iClonable以获得正确的副本。但是,在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
然后,您需要循环查看MyResearch子数据的原始列表,并将其克隆添加到第二个列表中。比如:

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

D.先生。。你能给我一个将一个arraylist克隆到另一个arraylist的示例代码吗当然,但你不需要克隆arraylist,而是克隆其中的项目。事实上,因为你使用了一个结构,所以你有两个选择。上面用示例进行了编辑。
  For Each item as myResearchSubData in MyResearchData.arraylistRData
       MyResearchDataAList.Add(CloneStructure(item))
    Next