【发布时间】:2015-05-31 02:26:35
【问题描述】:
晚上好。
我正在尝试对列表中的某些元素进行深度复制,但我发现它非常难以做到。我正在尝试很多新概念,如果以下代码看起来很奇怪,请耐心等待...
我有以下列表:
accountList as List(Of Account)
accountsInArea as New List(Of Account)
result as New List(Of Account)
其中每个元素的类型都是我自己定义的 Class:
Public Class Account
Enum AddingType
income
expenditure
End Enum
Enum AreaType
high
mid
low
End Enum
Property Area() As AreaType
Property Group() As String
Property AccountNumber() As Integer
Property AccountDescription() As String
Property IncomeExpenditure() As AddingType
Public Property MonthlyValues As New Dictionary(Of Integer, Decimal)
End Class
我需要找到accountList 的某些 项并将值 复制到一个新列表:accountsInArea。目前,我使用了以下方法:
accountsInArea = accountList.FindAll(Function(acc) acc.Area = area)
但是,这会生成 Lambda 表达式生成的那些项目的 reference 副本(不是吗?)。如果我在浏览 SO 和 MSDN 时理解正确,我需要的是元素的深拷贝。
我希望accountsInArea 拥有.FindAll 生产的所有项目的副本,包括(尤其是)MonthlyValuesDictionary 中的项目。
我试过了:
accountsInArea = accountList.Select(accountList.FindAll(Function(acc) acc.Area = area))
还有:
For Each account In accountList.FindAll(Function(acc) acc.Area = area)
accountsInArea.Add(account)
Next
最后添加到类中:
Implements ICloneable
Public Function Clone() As Object Implements System.ICloneable.Clone
Return Me.MemberwiseClone
End Function
并在方法内部使用:
accountsInArea = accountList.FindAll(Function(acc) acc.Area = area)
result = accountsInArea.Select(Function(acc) acc.Clone()).Cast(Of Account).ToList
非常感谢您的帮助。
【问题讨论】:
标签: vb.net list class clone deep-copy