Way*_*yne 15 c# hash reference equals gethashcode
伙计们,这对你来说是一个棘手的问题!
TickZoom系统的一部分必须将每种类型对象的实例收集到Dictionary <>类型中.
它们的相等和哈希代码必须基于对象的实例,这意味着引用相等而不是值相等.挑战在于系统中的某些对象已重写Equals()和GetHashCode()以用作值相等,其内部值将随时间而变化.这意味着他们的Equals和GetHashCode是无用的.如何解决这个问题而不是侵扰性?
到目前为止,我们创建了一个结构来包装每个名为ObjectHandle的对象,以便散列到Dictionary中.如下所示,我们实现了Equals(),但仍然存在如何计算哈希码的问题.
public struct ObjectHandle : IEquatable<ObjectHandle>{
public object Object;
public bool Equals(ObjectHandle other) {
return object.ReferenceEquals(this.Object,other.Object);
}
}
Run Code Online (Sandbox Code Playgroud)
看到?有一个方法object.ReferenceEquals(),它将比较引用相等性,而不考虑对象中任何被重写的Equals()实现.
现在,如何通过仅考虑引用而不考虑任何重写的GetHashCode()方法来计算匹配的GetHashCode()?
啊,我希望这给你一个有趣的谜题.我们被困在这里.
真诚的,韦恩
Way*_*yne 20
RuntimeHelpers.GetHashCode()完全符合这里的要求.
归档时间: |
|
查看次数: |
5344 次 |
最近记录: |