小编典典

如何在 .NET 中对对象进行深层复制?

all

我想要一个真正的深拷贝。在 Java 中,这很容易,但在 C# 中如何做到这一点?


阅读 130

收藏
2022-03-04

共1个答案

小编典典

重要的提示

BinaryFormatter已被弃用,2023
年 11 月后将不再在 .NET 中可用。请参阅BinaryFormatter
淘汰策略


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

public static T DeepClone<T>(this 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;
    
2022-03-04