怎么重写C#中Equals()方法?

刘同岳 2013-05-22 04:59:06
在同一个类中添加对象到List集合中,可以通过对象名删除?
如果将这个集合传到其他类中,在其他类中通过对象删除不了?
我们老师说,不在同一个类中通过对象删除不了,因为他们的内存地址不是一个?
需要重载Equals()方法?
请问怎么重写?
发下具体代码。谢谢
...全文
392 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
threenewbee 2013-05-23
  • 打赏
  • 举报
回复
引用 7 楼 u010080679 的回复:
[quote=引用 3 楼 caozhy 的回复:] [quote=引用 楼主 u010080679 的回复:] 在同一个类中添加对象到List集合中,可以通过对象名删除? 如果将这个集合传到其他类中,在其他类中通过对象删除不了? 我们老师说,不在同一个类中通过对象删除不了,因为他们的内存地址不是一个? 需要重载Equals()方法? 请问怎么重写? 发下具体代码。谢谢
什么叫对象名?你说的是引用变量名? User u = new User() { id = 1 }; List<User> list = new List<User>() { u }; u = new User() { id = 2 }; list.Add(u); list.Remove(u); // 当然删除的是 id = 2 的那个。[/quote] 不是这个意思,这我知道,我说在不同类中,通过参数传递过去。在另一个类中你删除u还能删除吗?[/quote] 当然可以。
XBodhi. 2013-05-23
  • 打赏
  • 举报
回复
引用 4 楼 caozhy 的回复:
User u = new User() { id = 1 }; List<User> list = new List<User>() { u }; u = new User() { id = 2 }; list.Add(u); // 如果下面你想删除 id = 1 的那个,那么可以这么写,无需重写Equals list.Remove(list.First(x => x.id == 1));
Linq,lamuda表达式的方式为什么那么受欢迎哈哈
刘同岳 2013-05-23
  • 打赏
  • 举报
回复
引用 5 楼 ariesget 的回复:
在你的对象类里重写下 public override bool Equals(object obj) { 对象 Target = obj as 对象; if (Target == null) return false; return this.标识字段== Target.标识字段; } 就是在这个方法里写怎么判断2个类是相同的逻辑
ok谢谢
刘同岳 2013-05-23
  • 打赏
  • 举报
回复
引用 3 楼 caozhy 的回复:
[quote=引用 楼主 u010080679 的回复:] 在同一个类中添加对象到List集合中,可以通过对象名删除? 如果将这个集合传到其他类中,在其他类中通过对象删除不了? 我们老师说,不在同一个类中通过对象删除不了,因为他们的内存地址不是一个? 需要重载Equals()方法? 请问怎么重写? 发下具体代码。谢谢
什么叫对象名?你说的是引用变量名? User u = new User() { id = 1 }; List<User> list = new List<User>() { u }; u = new User() { id = 2 }; list.Add(u); list.Remove(u); // 当然删除的是 id = 2 的那个。[/quote] 不是这个意思,这我知道,我说在不同类中,通过参数传递过去。在另一个类中你删除u还能删除吗?
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
引用 5 楼 ariesget 的回复:
在你的对象类里重写下 public override bool Equals(object obj) { 对象 Target = obj as 对象; if (Target == null) return false; return this.标识字段== Target.标识字段; } 就是在这个方法里写怎么判断2个类是相同的逻辑
一般情况下,不建议重写Equals方法。如果你重写了它,但是没有重写对应的GetHashCode、==运算符,可能会导致严重的问题。建议通过实现IEqualityComparer接口代替。
ariesget 2013-05-22
  • 打赏
  • 举报
回复
在你的对象类里重写下 public override bool Equals(object obj) { 对象 Target = obj as 对象; if (Target == null) return false; return this.标识字段== Target.标识字段; } 就是在这个方法里写怎么判断2个类是相同的逻辑
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
User u = new User() { id = 1 }; List<User> list = new List<User>() { u }; u = new User() { id = 2 }; list.Add(u); // 如果下面你想删除 id = 1 的那个,那么可以这么写,无需重写Equals list.Remove(list.First(x => x.id == 1));
threenewbee 2013-05-22
  • 打赏
  • 举报
回复
引用 楼主 u010080679 的回复:
在同一个类中添加对象到List集合中,可以通过对象名删除? 如果将这个集合传到其他类中,在其他类中通过对象删除不了? 我们老师说,不在同一个类中通过对象删除不了,因为他们的内存地址不是一个? 需要重载Equals()方法? 请问怎么重写? 发下具体代码。谢谢
什么叫对象名?你说的是引用变量名? User u = new User() { id = 1 }; List<User> list = new List<User>() { u }; u = new User() { id = 2 }; list.Add(u); list.Remove(u); // 当然删除的是 id = 2 的那个。
神棍 2013-05-22
  • 打赏
  • 举报
回复
什么叫根据对象名删除? 直接从List集合中删除一个对象,不需要重写Equals方法;
whqjj2006 2013-05-22
  • 打赏
  • 举报
回复
http://msdn.microsoft.com/zh-cn/library/ms173147(v=VS.90).aspx MSDN 上说的很清楚

110,567

社区成员

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

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

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