如何制作我的清单的深层副本

时间:2016-05-07 06:37:56

标签: vb.net list

<?php

$category = [["English","French","Spanish","German"]];

$inCategory = '"' . implode('","', $category[0]) . '"';

$sql = "SELECT a.ad_id FROM `category_rel` a INNER JOIN tbl_category_master b ON a.category_id= b.fld_category_id WHERE b.fld_category_name IN ($inCategory)";

echo $sql;

'network = per_network的深层副本

vb&gt;&gt;&gt;我只是想将per_network的内容复制到网络,我尝试过ToList方法,但它是浅拷贝而且无法执行克隆方法我根本没有得到它

3 个答案:

答案 0 :(得分:3)

您可以创建一个扩展方法,在该方法中序列化对象只是为了再次反序列化它。这将使用它自己的引用创建一个新对象,因此是一个深层复制。

Public Module Extensions
    <System.Runtime.CompilerServices.Extension()> _
    Public Function DeepCopy(Of T)(ByVal Obj As T) As T
        If Obj.GetType().IsSerializable = False Then Return Nothing

        Using MStream As New MemoryStream
            Dim Formatter As New BinaryFormatter
            Formatter.Serialize(MStream, Obj)
            MStream.Position = 0
            Return DirectCast(Formatter.Deserialize(MStream), T)
        End Using
    End Function
End Module

现在你可以打电话:

Dim network As List(Of train) = per_network.DeepCopy()

修改

以上是我的代码所需的导入:

Imports System.IO
Imports System.Runtime.Serialization.Formatters.Binary

答案 1 :(得分:1)

最简单的选择是使用LINQ,例如

Dim newList = oldList.Select(Function(item) CreateCopyOfItem(item)).ToList()

CreateCopyOfItem的实施方式取决于项目的类型。如果类型具有CopyClone方法或复制构造函数,那么您将使用它,否则您只需创建该类型的新实例并复制相应的数据,例如。

Private Function CreateCopyOfItem(item As SomeType) As SomeType
    Return New SomeType With {.SomeProperty = item.SomeProperty}
End Function

显然,您实际上并不需要单独的功能,如果您愿意,可以将它们全部一起滚动:

Dim newList = oldList.Select(Function(item) New SomeType With {.SomeProperty = item.SomeProperty}).ToList()

答案 2 :(得分:0)

这是我使用的代码

Dim deepCopies = _dictOfBalances1.Keys.ToList

基本上deepCopies是_dictOfBalances1.Keys的深层副本

如果deepCopies是浅拷贝,则此代码将不起作用。

For Each code In deepCopies
    If allthecoincode.Contains(code) Then
    Else
        _dictOfBalances1.Remove(code)
        'deletedKeys.Add(code)
    End If
Next