为什么list.add()也会向对象和源对象添加项目?

时间:2011-06-15 21:58:15

标签: vb.net list add

希望这很简单。我需要能够在不修改全局mylist对象的情况下将元素添加到mylist.testlist的副本中。 (这似乎是通过以下代码发生的。)

当我处理x时,它应该是一个完全独立的对象,mylist也会被修改。我怎样才能解决这个问题?我曾广泛使用过列表,之前从未见过这种行为。我已经在Win 7 Pro 32位上测试并重现了.NET 3.5和.NET 4.0中的问题。

TIA!

源代码:

Public Class Form1
    Public mylist As New test

    Sub Main()
        Dim x As test = mylist
        For i As Integer = 0 To 10
            x.testlist.Add(False)
        Next

        MsgBox("x count: " + x.testlist.Count.ToString + vbCrLf + "mylist count: " + mylist.testlist.Count.ToString)

    End Sub

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Main()
    End Sub
End Class
Public Class test
    Public testlist As New List(Of Boolean)
    Public Sub New()
        testlist.Add(False)
    End Sub

End Class

1 个答案:

答案 0 :(得分:4)

正如Tim Schmelter在评论中指出的那样,你的问题就在于:

Dim x As test = mylist

x获取对mylist的引用。这意味着 xmylist)指向test的同一个实例。这就是改变其中一个也改变另一个的原因。

要解决此问题,您可以将x定义为test的新实例,并将所有元素从mylist.testlist复制到x.testlist