2011-12-26 50 views
1

我已经强类型类,复印数组元素

Public Class RowData 

    Sub New(ByVal rRecord As String, ByVal rAccount As String, _ 
      ByVal soExperian As Boolean, ByVal soEquifax As Boolean, ByVal soTransunion As Boolean, _ 
      ByVal snExperian As Boolean, ByVal snEquifax As Boolean, ByVal snTransunion As Boolean) 

     Me.Record = rRecord 
     Me.Account = rAccount 
     Me.oExperian = soExperian 
     Me.oEquifax = soEquifax 
     Me.oTransunion = soTransunion 
     Me.nExperian = snExperian 
     Me.nEquifax = snEquifax 
     Me.nTransunion = snTransunion 

    End Sub 

......... 

End Class 

然后,我使用以下代码来声明2层的元件阵列。

Dim Tradelines(1) As List(Of RowData) 

Tradelines(0) = New List (Of RowData) 
Tradelines(0).Add(New RowData("222", "222", False, False, False, False, False, False)) 

Tradelines(0)被填充,没有问题,但是当我使用以下代码来元-0复制到元-1他们似乎一定要如此,如果我在任一元素更改任何值,则其他元素自动更新。我不想那么说,任何线索?

Tradelines(1) = Tradelines(0) 
+0

他们没有约束。它们是相同的元素。 – Jonathan 2011-12-26 12:11:04

+0

这个SO帖子涵盖了它: http://stackoverflow.com/questions/222598/how-do-i-clone-a-generic-list-in-c – Xcalibur37 2011-12-26 15:14:38

回答

1

RowData类型的集合中的项目通过引用传递,它们不是值类型。这就是为什么改变一个项目会改变项目添加的所有集合的原因,因为它是同一个对象。

如果不需要相同的引用,则需要创建新对象并将它们添加到新集合中。一个很好的方法是在RowData课程中实施IClonable

Tradelines(1) = Tradelines(0).Clone() 
+0

克隆()函数然后Tradelines(1)(0)= Tradelines(0)(0).Clone'仅用于复制元素0中的第一个子项目,但我做了递归递归,现在所有东西都很好用, 谢谢! – xShareMaster 2011-12-27 10:36:32

0

试试这个

Tradelines(0).ForEach(AddressOf Tradelines(1).Add)