为什么以下'存在'布尔变量的值为false ???
foreach (Cell existCell in this.decoratorByCell.Keys)
{
//this call yield the same hashcode for both cells. still exist==false
bool exist =
this.decoratorByCell.ContainsKey(existCell);
}
我已经覆盖了GetHashCode()& Equals()方法如下:
public override int GetHashCode()
{
string nodePath = GetNodePath();
return nodePath.GetHashCode() + m_ownerColumn.GetHashCode();
}
public bool Equals(Cell other)
{
bool nodesEqual = (other.OwnerNode == null && this.OwnerNode == null) || (other.GetNodePath() == this.GetNodePath());
bool columnsEqual = (other.OwnerColumn == null && this.OwnerColumn == null) || (other.OwnerColumn == this.OwnerColumn);
bool treesEqual = (this.m_ownerTree == other.m_ownerTree);
return (nodesEqual && columnsEqual && treesEqual);
}
答案 0 :(得分:2)
您的Equals
和GetHashCode
实施做了很多不同的事情。他们应该互相镜像。
您在GetHashCode
实施中m_ownerTree
未提及Equals
。
此外,添加哈希码并不是计算哈希的麻烦方式。您可能想要对它们进行xor(^
)。
答案 1 :(得分:1)
哈希算法必须具有以下属性:
哈希算法应该具有以下属性:
您的哈希算法是否具有第一个必要的属性?它看起来并不像我这样。