C# 如何根据对象引用计算哈希码

2024-03-25

各位,这里有一个棘手的问题摆在你们面前!

TickZoom 系统的一部分必须将每种类型的对象的实例收集到 Dictionary 类型中。

它们的相等性和哈希码必须基于对象的实例,这意味着引用相等而不是值相等。挑战在于系统中的一些对象已经重写了 Equals() 和 GetHashCode() 来用作值相等,并且它们的内部值会随着时间的推移而改变。这意味着它们的 Equals 和 GetHashCode 没有用。如何通用地而不是侵入性地解决这个问题?

到目前为止,我们创建了一个名为 ObjectHandle 的结构来包装每个对象,以便哈希到字典中。如下所示,我们实现了 Equals(),但如何计算哈希码的问题仍然存在。

public struct ObjectHandle : IEquatable<ObjectHandle>{
    public object Object;
    public bool Equals(ObjectHandle other) {
        return object.ReferenceEquals(this.Object,other.Object);
    }
}

看?有一个方法 object.ReferenceEquals() 它将比较引用相等性,而不考虑对象中任何重写的 Equals() 实现。

现在,如何通过仅考虑引用而不关心任何重写的 GetHashCode() 方法来计算匹配的 GetHashCode() ?

啊,我希望这能给你一个有趣的谜题。我们被困在这里了。

真挚地, 韦恩


RuntimeHelpers.GetHashCode() http://msdn.microsoft.com/en-us/library/11tbk3h9.aspx正是这里所需要的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 如何根据对象引用计算哈希码 的相关文章

随机推荐