这就是我创建SortedDictionary的方式:
protected class OccupiedComparer : IComparer<Structure>
{
public int Compare(Structure a, Structure b)
{
if (a == b)
return 0;
if (a.AtomicPosition.x > b.AtomicPosition.x)
return 1;
else
return -1;
}
}
protected SortedDictionary<Structure, Vector2> m_BuildingOccupied = new SortedDictionary<Structure, Vector2>(new OccupiedComparer());
我运行此代码:
m_BuildingOccupied.Add(s, new Vector2(x, y));
foreach (var k in m_BuildingOccupied.Keys) {
bool c = m_BuildingOccupied.ContainsKey(k);
int hs = k.GetHashCode();
Debug.Log(hs + ", " + c);
}
即使所有添加的键都打印到控制台,其中一些键的“c”等于false,这意味着ContainsKey返回false ..即使键显然存在于字典中。
知道这个问题的原因是什么?我的自定义比较器,也许?
答案 0 :(得分:-1)
默认运算符==比较类的引用
溶液:
重载等于和GetHashcode() 或者比较所有字段。