您会认为如果两个字典包含相同的键和值,它们会返回相同的哈希码吗?但他们没有 - 如果两个字典包含相同的键和值,我如何让它们返回相同的哈希码?
谢谢。下面的代码示例 - 哈希码不同。
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)
对于引用类型,哈希码是基于引用而不是对象本身定义的。只有当两个字典指向同一个对象时,哈希码才会相同。
您可以在自己的类中覆盖 GetHashCode 方法,并重新编码以根据字典的内容构建自定义哈希码,但这会破坏用户对该函数工作方式的期望,因此可能不是一个好主意. 我会编写一个扩展方法或一个 IComparer,它采用 2 个字典并通过比较它们中的值来比较它们。