【发布时间】:2011-06-15 21:58:15
【问题描述】:
希望这足够简单。我需要能够在不修改全局 mylist 对象的情况下将元素添加到 mylist.testlist 的副本中。 (这似乎是通过下面的代码发生的。)
当我处理应该是一个完全独立的对象的 x 时,mylist 也会被修改。我怎样才能解决这个问题?我已经广泛使用列表,以前从未见过这种行为。我已经在 Win 7 Pro 32bit 上的 .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
【问题讨论】:
-
为什么
x应该是一个与mylist完全不同的对象?使用Dim x As test = mylist,您引用的是同一个对象。 -
我认为 Dim x As test = mylist 创建了一个单独的对象,它是 mylist 的副本。不?这也是我用来解决这个问题的原型代码。这段代码的唯一目的是演示我遇到/感知的问题。
-
我还需要能够创建 mylist 的副本,这样我就可以在不修改全局 mylist.testlist 的情况下修改 mylist.testlist 数据的副本。
-
那么你是说
Dim x As test = mylist正在使x成为指向mylist的某种类型的指针引用?如果是这样,我该如何避免这种行为?