c#中字典的一致哈希码

Sup*_*234 1 c#

您会认为如果两个字典包含相同的键和值,它们会返回相同的哈希码吗?但他们没有 - 如果两个字典包含相同的键和值,我如何让它们返回相同的哈希码?

谢谢。下面的代码示例 - 哈希码不同。

    SortedDictionary<int,string> sd1 = new SortedDictionary<int,string>();
    sd1.Add(1,"one");
    sd1.Add(2, "two");
    sd1.Add(5, "five");
    int sd1Hash = sd1.GetHashCode();

    SortedDictionary<int, string> sd2 = new SortedDictionary<int, string>();
    sd2.Add(1, "one");
    sd2.Add(2, "two");
    sd2.Add(5, "five");
    int sd2Hash = sd2.GetHashCode();
Run Code Online (Sandbox Code Playgroud)

Sim*_*ens 5

对于引用类型,哈希码是基于引用而不是对象本身定义的。只有当两个字典指向同一个对象时,哈希码才会相同。

您可以在自己的类中覆盖 GetHashCode 方法,并重新编码以根据字典的内容构建自定义哈希码,但这会破坏用户对该函数工作方式的期望,因此可能不是一个好主意. 我会编写一个扩展方法或一个 IComparer,它采用 2 个字典并通过比较它们中的值来比较它们。