相同的 GUID 可以产生不同的哈希码吗?

Can same GUID produce different hash codes?

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

整个 GUID:

不同的哈希码:

等于==true:

而且,显然,两者都是 System.Guid:

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

这是预期的行为吗?

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

所以:问题出在具有 .Id 的类型,tagsexistingTags 中的东西。看看EqualsGetHashCode.

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

我敢打赌这些列表包含一个 Tag class 和一个显示 GUID 的 DebuggerDisplay 属性,可能是最后一个屏幕截图中出现的 ID,例如:

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

Watchwindow会在Value列显示ID属性的内容,在Type列显示Tag的实际类型=]列。

Tag的ID可能相同,但内容可能不同,导致哈希码不同。等于可能只是因为它不使用与 GetHashCode() 相同的字段