【C#】オブジェクトのDeepCopyとCompare

C#

C#でオブジェクトをコピーするときや比較するときは、単に”=”や”==”演算子を使用すると参照コピー(参照比較)になります。

内部の実体まで複製するコードを記載します。

下準備

以前のシリアライズ関数を用意します。

        public static string SerializeJson<T>(T obj)
        {
            var jsonOptions = new JsonSerializerOptions
            {
                WriteIndented = true,
            };
            return JsonSerializer.Serialize(obj, jsonOptions);
        }

        public static T DeserializeJson<T>(string jsonString)
        {
            var jsonOptions = new JsonSerializerOptions
            {
                WriteIndented = true,
            };
            return JsonSerializer.Deserialize<T>(jsonString, jsonOptions);
        }

オブジェクトコピー(DeepCopy)

        public static void DeepCopy<T>(T src, out T dst)
        {
            string json = SerializeJson(src);
            dst = DeserializeJson<T>(json);
        }

オブジェクト比較(DeepCompare)

        public static bool DeepCompare<T>(T obj1, T obj2)
        {
            string json1 = SerializeJson(obj1);
            string json2 = SerializeJson(obj2);

            return json1 == json2;
        }

最後に

基本的にはobjectをstringに変換し、string同士でコピー・比較を行っています。

以上!

コメント

タイトルとURLをコピーしました