tagCANDY CGI VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
VBレスキュー(花ちゃん) の Visual Basic 2010 用 掲示板(VB.NET 掲示板)
[ツリー表示へ]  [ワード検索]  [Home]

タイトル Collectionオブジェクトのコピーについて
投稿日: 2017/02/08(Wed) 15:07
投稿者OrientalMelody
お世話になっております。

Collectionオブジェクトをその時点のデータ付きで別インスタンスとしてコピーしたいと思っています。

Class1クラスとForm1フォームを作成し、Button1ボタンを貼り付けて、
以下のコードを貼り付けます。

Public Class Class1
    Private mintTestNo As String
    Private mstrTestData As String
    Public Property TestNo() As Integer
        Get
            TestNo = mintTestNo
        End Get
        Set(ByVal Value As Integer)
            mintTestNo = Value
        End Set
    End Property
    Public Property TestData() As String
        Get
            TestData = mstrTestData
        End Get
        Set(ByVal Value As String)
            mstrTestData = Value
        End Set
    End Property

End Class

Public Class Form1
    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim TestCollection1 As New Collection
        Dim TestCollection2 As New Collection
        Dim TestItemA As New Class1
        Dim TestItemB As New Class1
        TestItemA.TestData = "AAA"
        TestItemA.TestNo = "1"
        TestCollection1.Add(TestItemA)
        'TestCollection2.Add(TestItemA)     '---@
        TestCollection2 = TestCollection1   '---A
        TestItemB.TestData = "BBB"
        TestItemB.TestNo = "2"
        TestCollection2.Add(TestItemB)

        Dim objItem As Class1
        For Each objItem In TestCollection1
           Debug.WriteLine("TestCollection1 " & objItem.TestNo & " " & objItem.TestData)
        Next objItem

        For Each objItem In TestCollection2
           Debug.WriteLine("TestCollection2 " & objItem.TestNo & " " & objItem.TestData)
        Next objItem

    End Sub
End Class


TestCollection2 = TestCollection1   '---A
でその時点までのデータと構造をコピーしたつもりなのですが、
結果は、

TestCollection1 1 AAA
TestCollection1 2 BBB
TestCollection2 1 AAA
TestCollection2 2 BBB

と参照先が共有されてしまうようです。

TestCollection2 = TestCollection1   '---A
をコメントアウトし、
TestCollection2.Add(TestItemA)      '---@
のコメントを外すともちろん所望の結果の

TestCollection1 1 AAA
TestCollection2 1 AAA
TestCollection2 2 BBB

になります。

CollectionオブジェクトはCloneメソッドもないようですし、
データと構造を別インスタンスとしてコピーするにはどのようにしたら良いのでしょうか?

もし何かお分かりの方がいらっしゃいましたら、ご教示の程、宜しくお願いいたします。

使用OS、言語:Win7 64bit、VB2005

- 関連一覧ツリー をクリックするとツリー全体を一括表示します)

古いスレッドにレスはつけられません。