将 VB.NET 列表对象设置为另一个对象时遇到问题。在下面的例子中
我在 ReadLocations
上创建一个实例,然后创建一个 ReadLocation
对象,然后循环遍历 ReadLocations
并设置 ReadLocation1
等于rl
。
如果我将 ReadLocation1
更改为其他内容 (assdfhsd),它也会更改 ReadLocations
索引。我真的很困惑为什么它会这样做,除非它是“=”符号意味着引用而不是实际设置值。请帮忙,因为我是一名 C# 开发人员,但我正在修改的程序是在 VB.NET 中。
Dim ReadLocations As New List(Of Model.ReadLocation)
Dim rl1 As New Model.ReadLocation
rl1.LL = "a"
Dim rl2 As New Model.ReadLocation
rl2.LL = "b"
ReadLocations.Add(rl1)
ReadLocations.Add(rl2)
Dim ReadLocation11 As New Model.ReadLocation
For Each rl As Model.ReadLocation In ReadLocations
ReadLocation11 = rl
Next
最佳答案
如果ReadLocation
是引用类型(类),则设置为该类对象实例的所有变量将始终是引用。 =
运算符仅在对引用类型进行操作时才设置对对象的新引用。它永远不会克隆该对象(除非它是值类型)。 C# 中也是如此。执行您想做的操作的唯一方法是将对象添加到第二个列表时克隆它们。不幸的是,.NET 没有提供简单的自动方法来克隆任何对象。执行此操作的标准方法是在 ReadLocation 类中实现 ICloneable 接口(interface)。然后你可以通过调用clone方法来克隆它:
ReadLocation1 = CType(rl.Clone(), ReadLocation)
但是,在该克隆方法中,您需要创建一个新的 ReadLocation 实例并手动设置其所有属性,然后返回它。例如:
Public Class ReadLocation
Implements ICloneable
Public Function Clone() As Object Implements ICloneable.Clone
Dim clone As New ReadLocation()
clone.Property1 = Me.Property1
clone.Property2 = Me.Property2
Return clone
End Function
关于vb.net - 将 VB.NET 列表对象复制到另一个列表对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11052570/