2013-12-24 65 views
-2

我有一个外部类如下克隆外部类

Class1 o1=new Class1(); 
Class1 o2=new Class1(); 

我想O1属性和值复制到O2。我喜欢

o1=o2; 
o2=null; 

这使得o1也是空的。我没有Class1的源代码来实现IClone。在这种情况下如何克隆对象?

+0

这是一个重复的 - 同一用户发布这两个问题。 – Tim

+0

这不是重复的,它是来自同一个人的确切副本。 –

+1

给用户的提示3131156:提出两次同样的问题不会增加您的问题得到解答的机会,特别是当第一个问题在评论和答案部分已经有答案时。 – Tim

回答

1

检出深层复制。

This question is similar,并检查他创造了一个非常酷的解决方案(接受一个)Kilhoffer的答案,这里是他发布的代码示例:

public static T DeepClone<T>(T obj) 
{ 
using (var ms = new MemoryStream()) 
{ 
    var formatter = new BinaryFormatter(); 
    formatter.Serialize(ms, obj); 
    ms.Position = 0; 

    return (T) formatter.Deserialize(ms); 
} 
} 

让我知道,如果这有助于。

+1

OP没有外部库的源代码 - 他们不能在他们试图克隆的类上实现ICloneable。 – Tim

+0

@DROP Tablr用户:我没有实现IClonable的源代码 – user3131156

+0

对不起,我找到了另一个例子。它的另一个堆栈问题。 Kilhoffer的答案就是你可能想要尝试的。 –

0

你可以尝试下面的方法,这将不需要IClonable的实现,你可以传入任何可序列化的对象并获得相同的深层副本。看看this

 public static MyType[] DeepClone(MyType[] obj) 
    { 
       using (MemoryStream ms = new MemoryStream()) 
       { 
        BinaryFormatter formatter = new BinaryFormatter(); 
        formatter.Serialize(ms, obj); 
        ms.Position = 0; 

        return (MyType[])formatter.Deserialize(ms); 
       } 
     }