递归的对象属性值比较
//方法代码如下:
public static bool PropertyEquals(object o1, object o2)
{
PropertyInfo []pInfos1 = o1.GetType().GetProperties();
PropertyInfo[] pInfos2 = o2.GetType().GetProperties();
if(!pInfos1.Length.Equals(pInfos2.Length))
{
return false;
}
for(int i=0; i <pInfos2.Length;i++)
{
if (!PropertyEquals(pInfos2[i].GetValue(o2, null), pInfos1[i].GetValue(o1, null))) return false;
}
return true;
}
/*
问题是这样递归的比较在遇到值类型时是不需要的。如何判断值类型?
现在还会进入死循环,加什么样的出口条件?请高手帮忙解决或提示一下。
*/
------解决方案--------------------你为什么不重写对象的Equals方法来实现对象的比较呢!
------解决方案--------------------如何判断值类型?
判断 obj is ValueType
------解决方案--------------------//不递归行吗,接分过五一
public static bool PropertyEquals(object AObject1, object AObject2)
{
if (object.ReferenceEquals(AObject1, AObject2)) return true; // 相同实例
if (object.Equals(AObject1, AObject2)) return true; // 相同值
if (AObject1 == null || AObject2 == null) return false; // 其中有空
PropertyInfo[] vPropertyInfos1 = AObject1.GetType().GetProperties();
PropertyInfo[] vPropertyInfos2 = AObject2.GetType().GetProperties();
if (vPropertyInfos1.Length != vPropertyInfos2.Length) return false;
for (int i = 0; i < vPropertyInfos1.Length; i++)
{
if (vPropertyInfos1[i].GetType() != // 类型不相同
vPropertyInfos2[i].GetType()) return false;
object vObject1 = vPropertyInfos1[i].GetValue(AObject1, null);
object vObject2 = vPropertyInfos2[i].GetValue(AObject2, null);
if (!(object.ReferenceEquals(vObject1, vObject2) ||
object.Equals(vObject1, vObject2))) return false;
}
return true;
}
------解决方案--------------------如果只是来比较任意两个对象,问题可能真的比较麻烦,没有好的办法.