如何在.NET(特别是C#)中对对象进行深层复制?
时间:2020-03-06 14:41:06 来源:igfitidea点击:
我想要一个真正的深复制。在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);
}
}
笔记:
- 为了使此类正常工作,班级必须标记为" [可序列化]"。
- 源文件必须包含以下代码:
using System.Runtime.Serialization.Formatters.Binary; using System.IO;
以Kilhoffer的解决方案为基础...
使用C3.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();
也许我们只需要一个浅表副本,在这种情况下,请使用" Object.MemberWiseClone()"。
在" MemberWiseClone()"的文档中有很好的建议,可用于深层复制策略:-
http://msdn.microsoft.com/zh-CN/library/system.object.memberwiseclone.aspx

![int []数组和int array []之间的区别](/res/img/loading.gif)