51 lines
1.7 KiB
C#
51 lines
1.7 KiB
C#
using System;
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using System.Text;
|
|
using System.Threading.Tasks;
|
|
|
|
namespace BMA.EHR.Recruit.Service.Extensions
|
|
{
|
|
public static class ObjectExtension
|
|
{
|
|
public static bool DeepCompare(this object obj, object another)
|
|
{
|
|
if (ReferenceEquals(obj, another)) return true;
|
|
if ((obj == null) || (another == null)) return false;
|
|
//Compare two object's class, return false if they are difference
|
|
if (obj.GetType() != another.GetType()) return false;
|
|
|
|
var result = true;
|
|
//Get all properties of obj
|
|
//And compare each other
|
|
foreach (var property in obj.GetType().GetProperties())
|
|
{
|
|
var objValue = property.GetValue(obj);
|
|
var anotherValue = property.GetValue(another);
|
|
if (!objValue.Equals(anotherValue)) result = false;
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public static bool Compare(this object obj, object another)
|
|
{
|
|
if (ReferenceEquals(obj, another)) return true;
|
|
if ((obj == null) || (another == null)) return false;
|
|
if (obj.GetType() != another.GetType()) return false;
|
|
|
|
//properties: int, double, DateTime, etc, not class
|
|
if (!obj.GetType().IsClass) return obj.Equals(another);
|
|
|
|
var result = true;
|
|
foreach (var property in obj.GetType().GetProperties())
|
|
{
|
|
var objValue = property.GetValue(obj);
|
|
var anotherValue = property.GetValue(another);
|
|
//Recursion
|
|
if (!objValue.DeepCompare(anotherValue)) result = false;
|
|
}
|
|
return result;
|
|
}
|
|
}
|
|
}
|