Ответ 1
Одно гибкое решение: вы можете использовать отражение, чтобы перечислять все свойства и определять, какие и не равны, а затем возвращать некоторый список свойств и оба разных значения.
Вот пример некоторого кода, который является хорошим началом для того, что вы просите. Он теперь только смотрит на значения поля, но вы можете добавить любое количество других компонентов для проверки на отражение. Он реализован с использованием метода расширения, чтобы все его объекты могли его использовать.
ИСПОЛЬЗОВАТЬ
SomeCustomClass a = new SomeCustomClass();
SomeCustomClass b = new SomeCustomClass();
a.x = 100;
List<Variance> rt = a.DetailedCompare(b);
Мой класс сравнения для сравнения с
class SomeCustomClass
{
public int x = 12;
public int y = 13;
}
И МЯСО И КАРТОФЕЛЬ
static class extentions
{
public static List<Variance> DetailedCompare<T>(this T val1, T val2)
{
List<Variance> variances = new List<Variance>();
FieldInfo[] fi = val1.GetType().GetFields();
foreach (FieldInfo f in fi)
{
Variance v = new Variance();
v.Prop = f.Name;
v.valA = f.GetValue(val1);
v.valB = f.GetValue(val2);
if (!v.valA.Equals(v.valB))
variances.Add(v);
}
return variances;
}
}
class Variance
{
public string Prop { get; set; }
public object valA { get; set; }
public object valB { get; set; }
}