为什么两个委托实例返回相同的哈希码?
- 论坛
- 为什么两个委托实例返回相同的哈希码?
25 浏览
为什么两个委托实例返回相同的哈希码?
请看下面的代码:
var x = new Action(() => { Console.Write(""); }); var y = new Action(() => { }); var a = x.GetHashCode(); var b = y.GetHashCode(); Console.WriteLine(a == b); Console.WriteLine(x == y);
这将输出:
True False
为什么哈希码是相同的?
这有点令人惊讶,并且会使在字典中使用委托的速度和使用列表一样慢(即查找的时间复杂度为O(n))。
更新:
问题是为什么哈希码相同。换句话说,是谁做出了这样(愚蠢)的决定?
一个更好的哈希码实现应该是:
return Method ^ Target == null ? 0 : Target.GetHashcode(); // 其中Method是IntPtr类型