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同士でコピー・比較を行っています。
以上!
コメント