自定的类如何才能用作dictionary的key?

种草德鲁伊 2010-11-13 04:47:30
比如

class KeyClass
{
public Type Type{ get; set; }
public string Name { get; set; }
}

是不是要重写GetHashCode Equals什么的?
...全文
279 10 打赏 收藏 转发到动态 举报
写回复
用AI写文章
10 条回复
切换为时间正序
请发表友善的回复…
发表回复
种草德鲁伊 2010-11-14
  • 打赏
  • 举报
回复
看了一下dictionary的源码,确实也是这样。
福来哥 2010-11-14
  • 打赏
  • 举报
回复
[Quote=引用 8 楼 karascanvas 的回复:]
搞定了,GetHashcode和Equals两个方法都必须重写才行..
[/Quote]
你的意思是实现IEqualeable接口就可以了吗?
但我看你的类像是要实现索引一样!!!
种草德鲁伊 2010-11-14
  • 打赏
  • 举报
回复
搞定了,GetHashcode和Equals两个方法都必须重写才行..
bloodish 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 karascanvas 的回复:]
GetHashcode内部应该怎么编写呢。
[/Quote]

return (Name+Type.Name).GetHashcode();
绿色夹克衫 2010-11-13
  • 打赏
  • 举报
回复
重载Equals应该就行
种草德鲁伊 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 sp1234 的回复:]

值?那么你应该用值做key,而不是整个对象。

你也可以重写GetHashcode方法返回值。

[/Quote]

可能我描述的不够清晰,就是如果两个属性Type和Name的值都相等的话,就判定整个对象相等。

还想请教一下大师,这样的话,GetHashcode内部应该怎么编写呢。
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 karascanvas 的回复:]
现在需要比较值,引用肯定不相等的...
[/Quote]

值?那么你应该用值做key,而不是整个对象。

你也可以重写GetHashcode方法返回值。
  • 打赏
  • 举报
回复
public Dictionary<KeyClass, MyResultType> 我的词典= new
Dictionary<KeyClass, MyResultType>();
种草德鲁伊 2010-11-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xiehuanxie 的回复:]

不写也可以, 用默认的Equals比较引用

[/Quote]

现在需要比较值,引用肯定不相等的...
xiehuanxie 2010-11-13
  • 打赏
  • 举报
回复
不写也可以, 用默认的Equals比较引用

111,129

社区成员

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

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

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