比较两个对象并找出差异的最佳方法是什么?
Customer a = new Customer();
Customer b = new Customer();
答案 0 :(得分:183)
一个灵活的解决方案:您可以使用反射来枚举所有属性并确定哪些属性相等,然后返回一些属性列表和两个不同的值。
这是一些代码的示例,它是您所要求的良好开端。它现在只查看Field值,但您可以添加任意数量的其他组件以通过反射进行检查。它是使用扩展方法实现的,因此您的所有对象都可以使用它。
使用
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;
}
和肉和马铃薯
using System.Collections.Generic;
using System.Reflection;
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; }
}
答案 1 :(得分:11)
可以使用Equals
方法和IEquatable<T>
接口来了解两个对象是否相等,但它们不允许您知道对象之间的差异。您可以通过比较每个属性值来使用反射。
另一种方法可能包括将这些实例序列化为某种文本格式,并比较结果字符串(XML,JSON,...)中的差异。