Files

35 lines
1.2 KiB
C#

namespace EgwCoreLib.Lux.Core
{
public static class CloneExtensions
{
#region Public Methods
/// <summary>
/// Clone profondo tramite serializzazione/deserializzazione di obj generici
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="obj"></param>
/// <returns></returns>
public static T DeepClone<T>(this T obj)
{
// Configurazione serializzatore JSON per risolvere errore di loop circolare
var JSSettings = new JsonSerializerSettings()
{
ReferenceLoopHandling = ReferenceLoopHandling.Ignore
};
var json = JsonConvert.SerializeObject(obj, JSSettings);
return JsonConvert.DeserializeObject<T>(json)!;
}
/// <summary>
/// Comparatore statico tra entità
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="original"></param>
/// <param name="edited"></param>
/// <returns></returns>
public static bool IsChanged<T>(T original, T edited) => !EqualityComparer<T>.Default.Equals(original, edited);
#endregion Public Methods
}
}