c# 两个对象属性值比较

程序小海 2013-10-28 10:12:03
A a=new A(){name="jack",age=2}
A b=new A(){name="Tom",age=3}

如何去比较 对象属性的值呢?
而且我对象的属性有几十个


求解! 谢谢!
...全文
799 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
dongdongdongJL 2013-10-29
  • 打赏
  • 举报
回复
你需要自己重载类的比较方法
threenewbee 2013-10-28
  • 打赏
  • 举报
回复
引用 5 楼 stone1314 的回复:
[quote=引用 3 楼 wanghui0380 的回复:] 如果是总体比较,简单的做法二进制序列化后比较md5值 如果是你要得出到底是那些属性不同,那么就没啥简单方法了,只能挨个判定了
我只需要知道 这个对象属性值 是否相等就ok 或者说就是 我对一个对象加密解密了 判断这个对象的属性值是否篡改了[/quote] 你应该明白,属性值本身可能是一个对象,而不是一个简单的类型。因此我们不应该对属性值如何判定相等做任何的设想。这件事谁也不明白,除了类的设计者本身。
threenewbee 2013-10-28
  • 打赏
  • 举报
回复
办法有很多,比如一个一个比较,或者反射。 如果你觉得前者写得麻烦,后者性能太低,可以来点元编程。 http://bbs.csdn.net/topics/390600500 这个是属性复制,你要的是属性的比较,这个你自己举一反三了。 之前我说了,对象是否相等应该让对象的定义者去实现,这有什么好处呢?很显然,这样做很适合递归,看这个场景: class Department { public People Leader { get; set; } ... } class People { public string Name { get; set; } public int Age { get; set; } } 现在的问题是怎么比较Department 如果每个类自己管好自己的比较,那么很简单,否则作为最顶层的Department,必须知道如何判断People如何比较(名字年龄一致就算一个人了么?)。设想,在很复杂的类聚合关系中,你将这种比较的代码写在一起,就违反了单一职责原则。
程序小海 2013-10-28
  • 打赏
  • 举报
回复
引用 3 楼 wanghui0380 的回复:
如果是总体比较,简单的做法二进制序列化后比较md5值 如果是你要得出到底是那些属性不同,那么就没啥简单方法了,只能挨个判定了
我只需要知道 这个对象属性值 是否相等就ok 或者说就是 我对一个对象加密解密了 判断这个对象的属性值是否篡改了
程序小海 2013-10-28
  • 打赏
  • 举报
回复
引用 1 楼 caozhy 的回复:
if (a == b) ... 相同 至于如何算a和b相等,这是A这个类的编写者考虑的事情。如果他没有特别的考虑,相等就是比较引用。
我现在就是 在考虑 A这个类 属性值的比较 不知道怎么重新比较方法
wanghui0380 2013-10-28
  • 打赏
  • 举报
回复
如果是总体比较,简单的做法二进制序列化后比较md5值 如果是你要得出到底是那些属性不同,那么就没啥简单方法了,只能挨个判定了
threenewbee 2013-10-28
  • 打赏
  • 举报
回复
如果你就是A这个类的编写者,你应该通过重载Equals GetHashCode定义什么才叫相等,而不是让调用者去瞎蒙。
threenewbee 2013-10-28
  • 打赏
  • 举报
回复
if (a == b) ... 相同 至于如何算a和b相等,这是A这个类的编写者考虑的事情。如果他没有特别的考虑,相等就是比较引用。

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧