2011-09-22 18 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

相關問題