我的程序决定分配指针而不是制作对象的副本,我不知道为什么。我有这样的事情:VB.net 3.5 assignmet操作员分配指针而不是复制?
Public Class Foo
Private myFooData As New List(Of FooData)
Public Sub New(ByVal newFooData As List(Of FooData))
myFooData = newFooData
End Sub
Public Property FooValues() As List(Of FooData)
Get
Return myFooData
End Get
Set(ByVal value As List(Of FooData))
myFooData = value
End Set
End Property
End Class
而且它使用的是这样的:
Public Sub Dosomething()
Dim mainFoo as new Foo
For x = 1 to 10
mainFoo.FooValues(x) = New FooData
Next
Dim originalFoo as new Foo
originalFoo.FooValues = mainFoo.FooValues.Take(3).ToList
Dim newFoo as new Foo
newFoo.FooValues = originalFoo.FooValues
newFoo.FooValues(1) += 1
End Sub
非常简单,但基本上我在做什么。因此,出于某种原因,当我在newFoo.FooValues中更改项目时,originalFoo.FooValues也会更改,而mainFoo则不会。我试着分配整个对象,并得到相同的结果。任何想法,为什么这可能会发生,以及如何解决它?
FooData是另一个具有两个setable属性的类,都是小数。我已经尝试使用.ToList()时,将原始FooValues分配给新的FooValues和属性的集合,但它仍然工作相同,所以我假设你必须做某种选择或筛选以获得它来创建副本。 – Loscas 2010-12-16 19:35:05
@Loscas没有办法让它自动创建副本 - 复制数据效率低下且设计不佳(它促进了可能过时的数据的工作)。 – 2010-12-16 19:36:41