C#でディープコピーでクラスやオブジェクトを複製する方法を説明します。
ディープコピーする方法
C#にはオブジェクトやクラスをディープコピーする機能はありません。
独自にメソッドを作成する必要があります。
JSONのシリアライズを利用してディープコピー
JSONのシリアライズを利用して、オブジェクトをディープコピーする拡張メソッドです。
以下の環境で動作します
.NET Core | .NET Core 3.0以降 |
.NET | .NET 5以降 |
public static class ExtendedMethod
{
/// <summary>
/// ディープコピー
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="src"></param>
/// <returns></returns>
public static T DeepCopy<T>(this T src)
{
return JsonSerializer.Deserialize<T>(JsonSerializer.Serialize<T>(src));
}
}
サンプルコード
ディープコピーのサンプルコードです。
クラス:Class1内の変数:textに代入された文字列を表示します。
private void TestResult()
{
Class1 class1Obj1 = new Class1();
class1Obj1.text = "Hallo World!";
var class1Obj2 = class1Obj1.DeepCopy();
class1Obj2.text = "こんにちは世界!";
MessageBox.Show("class1Obj1:" + class1Obj1.text + "\n" + "class1Obj2:" + class1Obj2.text);
}
実行結果
class1Obj1:Hallo World!
class1Obj2:こんにちは世界!