【C#】ディープコピーでクラスやオブジェクトを複製する方法

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:こんにちは世界!
ブログランキング
PVアクセスランキング にほんブログ村
タイトルとURLをコピーしました