我有两个相同类型的复杂(即具有string,int,double,List和其他自制数据类型的对象)对象.我想比较它们的内容,以确保它们是相同的.注意:该对象没有实现.Equals(我无法控制)并且没有实现IComparable.
是否有通用方法(反射?)来比较两个对象的内容?
谢谢!
我创建了一个类来执行.NET Objects的深度比较.看到:
https://github.com/GregFinzer/Compare-Net-Objects
我的工作解决方案.!
private bool Compare(object obj1, object obj2) { if (obj1 == null || obj2 == null) { return false; } if (!obj1.GetType().Equals(obj2.GetType())) { return false; } Type type = obj1.GetType(); if (type.IsPrimitive || typeof(string).Equals(type)) { return obj1.Equals(obj2); } if (type.IsArray) { Array first = obj1 as Array; Array second = obj2 as Array; var en = first.GetEnumerator(); int i = 0; while (en.MoveNext()) { if (!Compare(en.Current, second.GetValue(i))) return false; i++; } } else { foreach (PropertyInfo pi in type.GetProperties(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)) { var val = pi.GetValue(obj1); var tval = pi.GetValue(obj2); if (!Compare(val, tval)) return false; } foreach (FieldInfo fi in type.GetFields(BindingFlags.NonPublic | BindingFlags.Instance | BindingFlags.Public)) { var val = fi.GetValue(obj1); var tval = fi.GetValue(obj2); if (!Compare(val, tval)) return false; } } return true; }
希望能帮助到你.!