将一个对象通过序列化深拷贝后,和原来的相比,Equals()方法返回false,不知怎么处理,有碰到过的朋友吗?谢谢

解决方案 »

  1.   

    你的对象是神马类型的?值OR引用?如果引用型的(如Class),默认应该是比较引用的对象(估计是对象地址)。自己重写下Equals()方法就好了
      

  2.   

    需要重写类的Equlas()方法,和gethashcode()方法
      

  3.   

    Equals应该对比的是内容,不是引用地址:)
      

  4.   

    http://blog.csdn.net/shawn_yang/article/details/9230031
      

  5.   

    如果两个引用指向堆中的同一个实例,这时候 Equals才是true.
    如果两个引用分别指向堆中一个实例,而这两个实例的内容完全相同,那么Equls也是false.深拷贝本来就是为了解决不同的引用指向同一个实例的问题,也就是说深拷贝的目的就是在希望能在堆中有两个内容完全相同的两个实例。所有你再Equals肯定是false了。
      

  6.   


    谁告诉你的Equals对比的是内容???
      

  7.   


    谁告诉你的Equals对比的是内容???
    1.==对比的是对象引用
    2.Equals对比的是对象内容
    3.而string 类型一只对比的是内容
      

  8.   

    谢谢,那么如何对比拷贝前后的两个对象在内容上是否一致呢?
    上面回答你了,重写 Equals()
      

  9.   

    上面回答你了,重写 Equals()呵呵,重写我知道,问题是总不能一个个对比属性值吧?我问的意思是有没有其他比较省事的方案
      

  10.   

    上面回答你了,重写 Equals()呵呵,重写我知道,问题是总不能一个个对比属性值吧?我问的意思是有没有其他比较省事的方案据我所知没有,磨刀不误砍柴工,就属性一个个对比一下返回true false好了
      

  11.   


    谁告诉你的Equals对比的是内容???
    1.==对比的是对象引用
    2.Equals对比的是对象内容
    3.而string 类型一只对比的是内容笑而不语。上面都跟你说了默认比较的是引用地址,你非要来这么说对于值类型 =和equals都是比较的 
    对于引用类型  =和equals 默认都是比较的 引用地址string 这部分没问题
      

  12.   


    谁告诉你的Equals对比的是内容???
    1.==对比的是对象引用
    2.Equals对比的是对象内容
    3.而string 类型一只对比的是内容笑而不语。上面都跟你说了默认比较的是引用地址,你非要来这么说对于值类型 =和equals都是比较的 
    对于引用类型  =和equals 默认都是比较的 引用地址string 这部分没问题 codeproject上有一老外的专门的讲解视频,也有示例,你先看看再说话:)
      

  13.   

    上面回答你了,重写 Equals()呵呵,重写我知道,问题是总不能一个个对比属性值吧?我问的意思是有没有其他比较省事的方案据我所知没有,磨刀不误砍柴工,就属性一个个对比一下返回true false好了
    我觉得你也别重写了,要不然,还得重写GetHashCode.
    你直接加一个方法好了,比如MyEquals,这样,你自己决定逻辑,比如只有你关注的几个字段相等,你就可以认为相等,灵活控制。