我有一個外部類如下克隆外部類
Class1 o1=new Class1();
Class1 o2=new Class1();
我想O1屬性和值複製到O2。我喜歡
o1=o2;
o2=null;
這使得o1也是空的。我沒有Class1的源代碼來實現IClone。在這種情況下如何克隆對象?
我有一個外部類如下克隆外部類
Class1 o1=new Class1();
Class1 o2=new Class1();
我想O1屬性和值複製到O2。我喜歡
o1=o2;
o2=null;
這使得o1也是空的。我沒有Class1的源代碼來實現IClone。在這種情況下如何克隆對象?
檢出深層複製。
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);
}
}
讓我知道,如果這有助於。
OP沒有外部庫的源代碼 - 他們不能在他們試圖克隆的類上實現ICloneable。 – Tim
@DROP Tablr用戶:我沒有實現IClonable的源代碼 – user3131156
對不起,我找到了另一個例子。它的另一個堆棧問題。 Kilhoffer的答案就是你可能想要嘗試的。 –
你可以嘗試下面的方法,這將不需要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);
}
}
這是一個重複的 - 同一用戶發佈這兩個問題。 – Tim
這不是重複的,它是來自同一個人的確切副本。 –
給用戶的提示3131156:提出兩次同樣的問題不會增加您的問題得到解答的機會,特別是當第一個問題在評論和答案部分已經有答案時。 – Tim