1. ホーム
  2. c#

[解決済み] .NETでオブジェクトのディープコピーを行うにはどうすればよいですか?[重複しています]。

2022-03-15 18:48:27

質問内容

真のディープコピーがしたい。Javaでは簡単でしたが、C#ではどうやるのでしょうか?

どのように解決するのですか?

重要なお知らせ

バイナリフォーマッタ は非推奨となり、2023年11月以降に.NETで使用できなくなります。 参照 バイナリフォーマッタ廃止戦略


いくつかの異なるアプローチを見たことがありますが、私はこのように汎用的なユーティリティのメソッドを使用しています。

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;