.net集合:如何将对象从一个集合复制到另一个集合?

.net集合:如何将对象从一个集合复制到另一个集合?,.net,vb.net,oop,.net,Vb.net,Oop,我正在vb.net中实现一个自定义的图形算法,我遇到以下问题: 请使用代码: dim col as new collection dim myC as new system.collections.genericList(of myClass) dim obj1 as new myClass dim obj2 as new myClass myC.add(obj1) myC.add(obj2) dim myC2 as new system.collections.generic.list(

我正在vb.net中实现一个自定义的图形算法,我遇到以下问题:

请使用代码:

dim col as new collection
dim myC as new system.collections.genericList(of myClass)

dim obj1 as new myClass
dim obj2 as new myClass

myC.add(obj1)
myC.add(obj2)

dim myC2 as new system.collections.generic.list(of myClass)

myC2 = myC

col.add(myc2)

'In the next statement, the myC2 inside col collection will be decreased to contain
'only obj1, like myC. I supose this is for myC and myC2 contains only a pointer to
'objects obj1 and obj2 as well col contains pointers to myC and myC2
myC.remove(obj2)

'The problem is that I have to only copy myC to myC2, like a ByVal argument in a function,
'instead a ByRef argument, in order to mantain a copy of objects in myC2 while these
'objects should be removed from myC. How should I do it?

感谢您的帮助……

我同意iClonable为公开克隆行为提供了最好的界面,但建议查看AutoMapper以执行实际工作。AutoMapper将允许您动态映射类型,而无需使用所有A.Z=B.Z代码

而且,当将一个集合映射到另一个集合时,AutoMapper将自动创建源项的副本。事实上,您可以使用类似于以下的语句动态创建第二个集合:

var secondCollection = Mapper.DynamicMap<Collection<Items>>(firstCollection);
var secondCollection=Mapper.DynamicMap(firstCollection);
您可以轻松地将其放入iClonable.Clone方法中,如:

object ICloneable.Clone()
{
    return Mapper.DynamicMap<ThisType>(this);
}
object-ICloneable.Clone()
{
返回Mapper.DynamicMap(this);
}
(DynamicMap是一种方便的方法,允许您映射对象,而无需事先定义映射。如果您不必像克隆对象那样在映射时定义任何增量,这一点非常有用。)

当您在不支持通常使用的BinaryFormatter的平台上工作时,这也是实现克隆的一种好方法


希望有帮助。

您可以将myC作为参数传递给myC2的构造函数:

Dim myC2 As New System.Collections.Generic.List(Of [MyClass])(myC)

这将使用与myC相同的元素初始化一个新列表。

Microsoft建议不要实施iClonable(在框架设计指南中)。原因是它没有指定是深度复制还是浅层复制。是的,这是您必须确定的标准(准则就是准则)。大多数人认为这是一个很深的复制品。我已经实现了一个类似的ICopyable接口,用于实体(具有标识的实体),该接口将使用新标识创建实体的副本。