递归的对象属性值比较
//方法代码如下: 
                         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; 
 } 
------解决方案--------------------如果只是来比较任意两个对象,问题可能真的比较麻烦,没有好的办法.