2011-12-26 33 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)移入され、何も問題ありませんが、私は、彼らが拘束されているように見える要素-1に要素-0をコピーするには、次のコードを使用している場合ので、私はどちらかの要素に任意の値を変更した場合、他の要素は自動的に更新されます。私はそれを望んでいない、任意の手がかり?

Tradelines(1) = Tradelines(0) 
+0

を試してみてください。それらは同じ要素です。 – Jonathan

+0

これはまた、それをカバーします: http://stackoverflow.com/questions/222598/how-do-i-clone-a-generic-list-in-c – Xcalibur37

答えて

1

コレクションRowDataのコレクションは、値渡しではありません。そのため、同じオブジェクトであるため、アイテムを変更すると、アイテムが追加されたすべてのコレクションが変更されます。

同じ参照が必要ない場合は、新しいオブジェクトを作成して新しいコレクションに追加する必要があります。この方法の良い方法の1つは、RowDataクラスにIClonableを実装することです。

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

'Clone()'関数は'Tradelines(1)(0)= Tradelines(0)(0).Clone'は、要素0の最初のサブ項目をコピーするだけですが、再帰的な処理を行いました。 、ありがとう! – xShareMaster

0

彼らが囲まれていないこの

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