如何在.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