2012-02-23 9 views
1

この例は私の問題を示しています。私は何が起こることは「グース」ですVB.net 2010VB.net同じクラスからの別のリストはお互いにコピーします

Public Class Form1 

    Public Class BonoType 
     Public name As String 
    End Class 

    Private tory As New List(Of BonoType) 
    Private tory1 As New List(Of BonoType) 

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    End Sub 

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click 
     Dim gg As New BonoType 
     gg.name = "Boopsy" 
     tory.Add(gg) 
     gg = New BonoType 
     gg.name = "Dipsy" 
     tory.Add(gg) 

     tory1 = tory 
     Label1.Text = tory1(0).name 
     Label2.Text = tory1(1).name  
    End Sub 

    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click 
     tory(1).name = "Goose" 
     Label1.Text = tory1(0).name 
     Label2.Text = tory1(1).name 
     TextBox1.Text = tory(1).name 
    End Sub 
End Class 

を使用しています(1)トーリーに格納されていないだけでなく、tory1に(1)、私はこれをどのように停止することができます。

答えて

0

私はあなたの問題はあなたが保守党に等しいtory1を設定しているここ

tory1 = tory 

をあると信じています。あなたが遂行しようとしていることに従うのは難しいですが、実際には結束しているように見えます。あなたは

var thisTory = new tory 
Label1.Text = thisTory(0).name 
Label2.Text = tory1(1).name 
+0

(0F BonoType) – user1229283

0

私は問題がtory1 =トーリーで、あなただけ戻って元のオブジェクトへの参照を作成しているということだと思い検討する必要があります。代わりに新しいオブジェクトを作成する必要があります。

すなわち、VBで:

その後
Dim tory as New List(of String); 
Dim tory2 as List(of String) 

、コピーしたいtory2:

tory2 = New List(of String)(tory) 

C#:

List<String> tory = new List<String>(); 
List<String> tory2; 

tory2 = new List<String>(tory); 
保守党とTory1が新規リストとして作成された
+0

リファレンスとディープコピーの詳細はこちらhttp://www.dreamincode.net/forums/topic/75435-deep-copy-object/ – ChickenMilkBomb

+0

ToryとTory1はNew List(0f BonoType)として作成されました。BonoTypeはただ1つの文字列 "name"を持つ単なるクラスです。私はTroyとTroy1がこのクラスから作成されたオブジェクトだと仮定します。なぜ私が1つのオブジェクトを変更すると、他の変化が起こり、どうやってこれを止めることができないのでしょうか?私がNew toryを試すと、これを拒否します。 – user1229283

関連する問題