C#SortedDictionary ContainsKey返回false,即使密钥存在

时间:2016-06-07 18:22:57

标签: c# dictionary unity3d

这就是我创建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 ..即使键显然存在于字典中。

知道这个问题的原因是什么?我的自定义比较器,也许?

1 个答案:

答案 0 :(得分:-1)

默认运算符==比较类的引用

溶液:

重载等于和GetHashcode() 或者比较所有字段。