.net集合:如何将对象从一个集合复制到另一个集合?
我正在vb.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(
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接口,用于实体(具有标识的实体),该接口将使用新标识创建实体的副本。