希望这很简单。我需要能够在不修改全局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
答案 0 :(得分:4)
Dim x As test = mylist
x
获取对mylist
的引用。这意味着 (x
和mylist
)指向test
的同一个实例。这就是改变其中一个也改变另一个的原因。
要解决此问题,您可以将x
定义为test
的新实例,并将所有元素从mylist.testlist
复制到x.testlist
。