2013-12-24 92 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); 
       } 
     }