你如何做一个 net对象的深层副本(特别是c#)?


This question already has an answer here:

我想要一个真正的深层复制。在Java中,这很容易,但是你怎么在C#中做到这一点?

我已经看到了一些不同的方法,但是我使用了一个通用的实用方法:

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);
 }
}

笔记:

你的课必须被标记为[Serializable]为了这个工作。 您的源文件必须包含以下代码:
使用System.Runtime.Serialization.Formatters.Binary; 使用System.IO;

我写了一个深入的对象副本扩展方法,基于递归的“MemberwiseClone”。它速度快(比BinaryFormatter快三倍),并且适用于任何对象。您不需要默认的构造函数或可序列化的属性。

未经作者同意,本文严禁转载,违者必究!