你如何做一个.NET对象的深层副本(特别是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]
才能工作。 您的源文件必须包含以下代码:
using System.Runtime.Serialization.Formatters.Binary;
using System.IO;
我写了一个基于递归“MemberwiseClone”的深层对象副本扩展方法。 它速度快(比BinaryFormatter 快三倍),并且可以与任何对象一起使用。 您不需要默认的构造函数或可序列化的属性。
基于Kilhoffer的解决方案...
使用C#3.0,您可以创建一个扩展方法,如下所示:
public static class ExtensionMethods
{
// Deep clone
public static T DeepClone<T>(this T a)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, a);
stream.Position = 0;
return (T) formatter.Deserialize(stream);
}
}
}
它使用DeepClone方法扩展了任何被标记为[Serializable]的类
MyClass copy = obj.DeepClone();
链接地址: http://www.djcxy.com/p/6961.html
上一篇: How do you do a deep copy of an object in .NET (C# specifically)?
下一篇: Is there a much better way to create deep and shallow clones in C#?