比较两个对象,找出差异

比较两个物体并找出差异的最佳方法是什么?

Customer a = new Customer(); Customer b = new Customer(); 

一个灵活的解决scheme:你可以使用reflection枚举所有的属性,并确定哪些是和不相等的,然后返回一些属性列表和两个不同的值。

下面是一些代码的例子,对于你所要求的是一个好的开始。 它现在只查看Field值,但是可以添加任意数量的其他组件,以便通过reflection来检查。 它使用扩展方法实现,所以你的所有对象都可以使用它。

使用

  SomeCustomClass a = new SomeCustomClass(); SomeCustomClass b = new SomeCustomClass(); ax = 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; } } 

Equals方法和IEquatable<T>接口可以用来知道两个对象是否相等,但它们不会让你知道对象之间的差异。 您可以通过比较每个属性值来使用reflection。

另一种方法可能是将这些实例序列化为某种文本格式,并比较结果string(XML,JSON,…)内部的差异。