.NET でオブジェクトのディープコピーを行うにはどうすればいいですか? [重複] 質問する

.NET でオブジェクトのディープコピーを行うにはどうすればいいですか? [重複] 質問する

真のディープコピーが必要です。Java ではこれは簡単ですが、C# ではどのように行うのでしょうか?

ベストアンサー1

重要な注意点

バイナリフォーマッタは非推奨となり、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;
    

おすすめ記事