![]() |
1
4
根据Microsoft的文档,如果您打算将自己的数据结构用作哈希表中的键,则应始终覆盖GetHashCode(),否则可能会不安全。 “在哈希表对象中用作键的对象也必须重写GetHashCode方法,因为这些对象必须生成自己的哈希代码。” http://msdn.microsoft.com/en-us/library/system.object.gethashcode.aspx |
![]() |
2
4
|
![]() |
3
3
http://msdn.microsoft.com/en-us/library/dd183755.aspx
|
![]() |
4
1
根据MSDN,
因此,您的代码不能保证工作,如果它工作,就不能保证在下一版本的.NET framework中继续工作。
不管它的价值是什么,Monos当前的
|
![]() |
5
0
您的代码在.NET中应该可以正常工作,而且我敢说,即使.NET版本发生变化,它也会保持不变。问题是dictionary使用两种方式通过特定键访问值:Equals()和GetHashCode(),方式如下
值类型的Standard Equals()使用反射来访问字段并进行比较(如前所述)。考虑到这一点,默认的GetHashCode()必须与默认的Equals()实现的工作方式保持一致——如果a==b,a.GetHashCode()==b.GetHashCode()——无论哪种方式,如果它甚至不满足所需的最小值,那么提供默认实现就毫无意义。MSDN说的是GetHashCode()不提供唯一的值,这是完全可以理解的。请记住,这种简单的实现:
即使值不是唯一的,也仍然正确(字典、哈希表等可以使用)。性能当然是另一回事,使用这种实现将导致对每个集合进行完全扫描,并测试每个元素是否相等。 |
|
Robert King · Unity C#语法问题-转换位置 1 年前 |
![]() |
JBryanB · 如何从基本抽象类访问类属性 1 年前 |
|
law · 检查答案按钮的输入字符串格式不正确 2 年前 |
![]() |
i_sniff_ket · 在unity之外使用unity类 2 年前 |