同一GUID可以生成不同的哈希码吗?

时间:2017-07-06 13:45:26

标签: c# .net guid hashcode .net-4.6.2

给定相同的 GUID Object.GetHashCode生成不同的哈希码,但Object.Equals显示相同的GUID等于。

整个GUID:

enter image description here

不一样的哈希码:

enter image description here

等于== true

enter image description here

显然,两者都是System.Guid

enter image description here

即使它们具有相同的GUID,它们也会有不同的值,因为它们是从两个来源反序列化的。

这是预期的行为吗?

2 个答案:

答案 0 :(得分:6)

您的测试不正确。在您要比较.GetType().FullName的最后一部分中,您正在查看.Id,但不是您在上面比较的内容。

所以:问题在于具有.Id的类型,tagsexistingTags中的问题。查看 的EqualsGetHashCode

答案 1 :(得分:-1)

屏幕截图不显示监视变量的类型,只显示值。该值由DebuggerDisplay属性控制。

我敢打赌,这些列表包含一个Tag类,其中DebuggerDisplay属性显示GUID,也许是上次屏幕截图中显示的ID,例如:

[DebuggerDisplay("{ID}"]
public class Tag
{
    public Guid ID{get;set;}
    //...
}

“观察”窗口将显示ID列中Value属性的内容以及Tag列中的实际类型Type

标签的ID可能相同,但内容可能不同,从而产生不同的哈希码。等于可能只是因为它不使用GetHashCode()所做的相同字段