比较两个对象,找出差异
比较两个物体并找出差异的最佳方法是什么?
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,…)内部的差异。
- ASP.NET MVC的ViewResult与PartialViewResult
- ASP.Netvalidation摘要导致页面跳转到顶部
- 为什么我在调用Response.Redirect()时得到“在发送HTTP头之后无法redirect”?
- Server.MapPath(“。”),Server.MapPath(“〜”),Server.MapPath(@“\”),Server.MapPath(“/”)。 有什么不同?
- 无法向会话状态服务器发出会话状态请求
- 在Asp.net WebApi自定义授权 – 什么混乱?
- 如何检查是否在web.config中启用了debugging
- ASP.NET身份DbContext混淆
- 在C#中parsingJSON