我的复杂结构中的对象有一个属性Dictionary<Object, Object> Annotations
,我可以在其中存储在某些处理阶段使用的元数据和自定义数据。我现在可以创建一个static readonly object UniqueName = new object()
并将其用作字典中的键。我使用 a 是static readonly object
因为我确定它是独一无二的。没有其他人可以创建完全相同的对象实例。相反,如果我使用字符串作为键,其他人可能会不小心使用相同的字符串作为键,这可能会导致问题。
但是,我从几个来源(包括这里)了解到,默认GetHashCode
实现是基于对象在内存中的位置。当垃圾收集器移动对象时,这可能会发生变化,这会导致它返回的哈希值发生变化。发生这种情况时,字典将无法找到与键对象关联的值。
如何确保没有字段的对象在其生命周期内永远不会更改其哈希码?
天真的解决方案是创建一个总是返回的Key
对象。但是,这会严重影响字典的性能,因此不是解决方案。GetHashCode
42