给定相同的 GUID Object.GetHashCode
生成不同的哈希码,但Object.Equals
显示相同的GUID等于。
整个GUID:
不一样的哈希码:
等于==
true
:
显然,两者都是System.Guid
:
即使它们具有相同的GUID,它们也会有不同的值,因为它们是从两个来源反序列化的。
这是预期的行为吗?
答案 0 :(得分:6)
您的测试不正确。在您要比较.GetType().FullName
的最后一部分中,您正在查看.Id
,但不是您在上面比较的内容。
所以:问题在于具有.Id
的类型,tags
和existingTags
中的问题。查看 的Equals
和GetHashCode
。
答案 1 :(得分:-1)
屏幕截图不显示监视变量的类型,只显示值。该值由DebuggerDisplay属性控制。
我敢打赌,这些列表包含一个Tag
类,其中DebuggerDisplay
属性显示GUID,也许是上次屏幕截图中显示的ID,例如:
[DebuggerDisplay("{ID}"]
public class Tag
{
public Guid ID{get;set;}
//...
}
“观察”窗口将显示ID
列中Value
属性的内容以及Tag
列中的实际类型Type
。
标签的ID
可能相同,但内容可能不同,从而产生不同的哈希码。等于可能只是因为它不使用GetHashCode()
所做的相同字段