【发布时间】:2011-01-04 23:27:27
【问题描述】:
我有一个非常复杂的对象,我需要获得这些对象的唯一性。一种解决方案可以通过覆盖GetHashCode() 来完成。我已经实现了如下代码:
public override int GetHashCode()
{
return this._complexObject1.GetHashCode() ^
this._complexObject2.GetHashCode() ^
this._complexObject3.GetHashCode() ^
this._complexObject4.GetHashCode() ^
this._complexObject5.GetHashCode() ^
this._complexObject6.GetHashCode() ^
this._complexObject7.GetHashCode() ^
this._complexObject8.GetHashCode();
}
这些复杂的对象也覆盖 GetHashCode() 并执行类似的操作。
我的项目需要这些对象的唯一性,我非常经常处理这些对象,并且内部的数据也以各种方式更改和地点。
我需要一种更快的方法来找到这些复杂对象的唯一性,这需要考虑性能和内存。
提前致谢
穆尼姆
【问题讨论】:
-
如果数据发生变化,
GetHashCode()可能是错误的开始 - 此外,它只能保证不相等(它不能用于测试平等)。 -
谢谢 Marc,我没有执行测试相等性我使用
GetHashCode()来检查对象是否不相等,这就是我需要做的 -
只是想检查一下。不过,我不确定是否有魔术棒的答案。您可以通过缓存值并在发生更改时删除缓存的值来做一些事情,但这在复杂的图表中很棘手(因为您需要检查所有子对象)。
标签: c# .net performance hash-code-uniqueness