【问题标题】:Copy Array Elements复制数组元素
【发布时间】:2011-12-26 12:04:13
【问题描述】:

我有强类型类,

Public Class RowData

    Sub New(ByVal rRecord As String, ByVal rAccount As String, _
            ByVal soExperian As Boolean, ByVal soEquifax As Boolean, ByVal soTransunion As Boolean, _
            ByVal snExperian As Boolean, ByVal snEquifax As Boolean, ByVal snTransunion As Boolean)

        Me.Record = rRecord
        Me.Account = rAccount
        Me.oExperian = soExperian
        Me.oEquifax = soEquifax
        Me.oTransunion = soTransunion
        Me.nExperian = snExperian
        Me.nEquifax = snEquifax
        Me.nTransunion = snTransunion

    End Sub

.........

End Class

然后我使用下面的代码来声明 2 个元素的数组。

Dim Tradelines(1) As List(Of RowData)

Tradelines(0) = New List (Of RowData)
Tradelines(0).Add(New RowData("222", "222", False, False, False, False, False, False))

Tradelines(0) 已填充,没有问题,但是当我使用以下代码将 Element-0 复制到 Element-1 时,它们似乎已绑定,因此如果我更改任一元素中的任何值,其他元素会自动更新.我不想这样,有什么线索吗?

Tradelines(1) = Tradelines(0)

【问题讨论】:

标签: .net wpf vb.net arrays


【解决方案1】:

RowData 类型的集合中的项目是通过引用传递的,它们不是值类型。这就是为什么改变一个,会改变所有添加项目的集合,因为它是同一个对象。

如果您不想要相同的引用,您需要创建新对象并将它们添加到新集合中。一种好的方法是在您的 RowData 类中实现 IClonable

Tradelines(1) = Tradelines(0).Clone()

【讨论】:

  • Clone() 函数仅可用于子项目,这意味着我可以做,Tradelines(1)(0) = Tradelines(0)(0).Clone 仅复制 element-0 中的第一个子项目,但我做了一些递归的事情,现在一切都很好,谢谢!
【解决方案2】:

试试这个

Tradelines(0).ForEach(AddressOf Tradelines(1).Add)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-02-11
    • 2010-12-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    相关资源
    最近更新 更多