我的程序決定分配指針而不是製作對象的副本,我不知道爲什麼。我有這樣的事情: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