vb.net - 将 VB.NET 列表对象复制到另一个列表对象

标签 vb.net

将 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/

相关文章:

vb.net - 如何更新数据表

c# - 如何在线程应用程序的 console.writeline 期间阻止 console.readline 中断?

c# - 每次部署后,用户设置都会重置为默认值

vb.net - Try-Catch 异常处理程序 VB.NET

vb.net - 范围乘法 VB.NET(这段代码有什么问题?)

json - 跟踪具有动态属性的多个文件(字符串)的最佳方法是什么?

asp.net - 在.NET Web 服务中将soap 前缀更改为soapenv

vb.net - 我的哈希表正在反转其输出

java - 将java类转换为vb 2008应用程序

asp.net - GridView 分页 - 第一个、最后一个、下一个、上一个