35 lines
1.2 KiB
C#
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
|
|
}
|
|
} |