C# 无法调试GetHashCode方法

C# 无法调试GetHashCode方法,c#,data-structures,iequalitycomparer,C#,Data Structures,Iequalitycomparer,我以下面的方式实现了一个平等比较器 class BoxEqualityComparer : IEqualityComparer<Box> { public bool Equals(Box b1, Box b2) { if (b2 == null && b1 == null) return true; else if (b1 == null | b2 == null) retur

我以下面的方式实现了一个平等比较器

class BoxEqualityComparer : IEqualityComparer<Box>
{
    public bool Equals(Box b1, Box b2)
    {
        if (b2 == null && b1 == null)
           return true;
        else if (b1 == null | b2 == null)
           return false;
        else if(b1.Height == b2.Height && b1.Length == b2.Length
                            && b1.Width == b2.Width)
            return true;
        else
            return false;
    }

    public int GetHashCode(Box bx)
    {
        int hCode = bx.Height ^ bx.Length ^ bx.Width;
        return hCode.GetHashCode();
    }
}

Add(key,value)调用insert方法,而insert方法总是通过

int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
换句话说,每次调用Dictionary.Add都应该通过您提供的IEqualityComparer触发密钥哈希计算

至于您的示例代码,这对我来说效果很好,VS 2015在BoxEqualityComparer.GetHashCode()上对我来说确实很好。

请参阅

Add(key,value)调用insert方法,而insert方法总是通过

int hashCode = comparer.GetHashCode(key) & 0x7FFFFFFF;
换句话说,每次调用Dictionary.Add都应该通过您提供的IEqualityComparer触发密钥哈希计算


至于您的示例代码,这对我来说很好,VS 2015在BoxEqualityComparer.GetHashCode()上对我来说确实很好。

您使用
ContainsKey
作为示例,但在
dict.Add(box,name)
上也应该调用它。尝试使用调试配置进行清理和重建。例如,您可以使用
ContainsKey
,但也可以在
dict.Add(box,name)
处调用它。尝试使用调试配置进行清理和重建。添加时,它将仅调用gethashcode方法还是同时调用Equals方法?它最终也会为我命中比较器的Equals方法,特别是在您第二次调用AddBox时。(->Dictionary.Add->Dictionary.Insert(参见Dictionary类的源代码链接中的第334行)在Add上它会只调用gethashcode方法还是同时调用equal方法?它最终也会为我命中比较器的Equals方法,特别是在您第二次调用AddBox时。(->Dictionary.Add->->Dictionary.Insert)(参见Dictionary类“源代码链接”中的第334行)