【发布时间】:2018-05-04 10:22:06
【问题描述】:
我想在 C# 中覆盖哈希表上的 GetHashCode 方法。
我将哈希表用作复杂对象中的多维键。
怎么会这样?
hKey 中不同顺序的键必须返回相同的hashCode。
这样的事情是行不通的:
Hashtable hkey;
int i = 0;
foreach (DictionaryEntry de in hkey)
i ^= de.GetHashCode();
return i;
【问题讨论】:
-
你试过什么?您可以通过继承要更改的类来覆盖
GetHashCode,然后改用新的子类。 -
为什么你仍然使用
HashTable而不是Dictionary<SomeType, SomeType>? -
嗯,XOR 运算符不关心顺序,所以“不起作用”的抱怨没有帮助。当 GetHashCode() 变得太慢时,它很快就会变得无用,迭代整个集合是不正确的。考虑
return hkey.Count; -
看我下面的帖子问题来自dictionaryEntry的GetHashCode,它只考虑了关键部分。关于性能,我保留了 HashCode 的缓存;)
标签: c# hashtable gethashcode