2 .net c# dictionary
只是覆盖Equals在TKey没有帮助.
public override bool Equals(object obj)
{ /* ... */ }
Run Code Online (Sandbox Code Playgroud)
... Equals()永远不会被称为......
当您进行字典查找时,这就是事情发生的顺序:
如果存储桶永远不匹配(因为GetHashCode没有被覆盖),那么你永远不会调用Equals.这就是为什么你应该总是实现两者的原因之一 - 如果你想在散列集合中使用你的对象,你应该覆盖这两个函数(比调用base.GetHashCode()更有意义).
如果您正在实现一个类,则应该实现一个GetHashCode例程,该例程为Equal的项返回相同的哈希码.理想情况下,您希望尽可能为不相等的项返回不同的哈希代码,因为这将使您的字典查找更快.
您还应该以正确检查相等实例的方式实现Equals.
类(引用类型)的默认实现只是比较引用本身.默认情况下,两个实例具有完全相同的值,并且在Equals上返回false(因为它们具有不同的引用).默认情况下,多个实例始终也会返回不同的哈希代码.