我最近继承了一个应用程序,使非常重使用的会议,包括存储大量的定制数据对象的会议。我的第一点的业务与这种应用是至少移动的会议的数据远离InProc,并且关闭它加载到会话或SQL服务器。

之后我做了所有的适当对象的数据序列化和改变该网络。config使用国家服务,一切都出现了工作的罚款。

然而,我发现,这种应用做了很多的目的比较,使用GetHashCode().方法工作,现时的会议InProc不再工作,因为HashCodes不再是比赛的时候他们应该。这似乎是这种情况下试图找到一具体对象的儿童从父母的时候你知道的孩子对象的原散列码

如果我只是更改的网页。config回到使用inproc,它的工作。

任何人有任何想法从哪里开始吗?


编辑:

qbeuek:谢谢你的快速回复。关于:

默认的执行情况的GetHashCode在对象类返回的散列值基础上对象的地址在存储器或类似的东西。如果一些其他身份比较是必需的,你有复盖平等和GetHashCode.

我应该给予更多的信息,它们是如何使用这个。基本上,他们有一个父数据对象,并且有几个阵列的儿童的对象。他们碰巧知道的哈代码,用于一个特定的对象,他们的需要,因此他们是循环,通过一个具体阵列的儿童的对象,在寻找一散列代码相匹配。一旦找到匹配,然后,他们使用对象的其他工作。

有帮助吗?

解决方案

当你写的

不会很多的目的比较,使用GetHashCode()

我感觉有什么可怕的错误这个代码。GetHashCode方法并不能保证,返回的散列值应该是在任何独特的方式给两个不同的对象。尽GetHashCode感到关切的是,它可以返回0用于所有目的和仍然被认为是正确的。

当两个对象是相同的(等方法返回真正的),它们 必须 具有同样的价值返回GetHashCode.当两个对象具有相同的散列值,它们 可以 以相同的对象(等于返回的真正)或是不同的对象(等于返回false)。

有没有其他保障措施的结果GetHashCode.

默认的执行情况的GetHashCode在对象类返回的散列值基础上对象的地址在存储器或类似的东西。如果一些其他身份的比较需要你 有来 复盖两个平等和GetHashCode.

其他提示

复盖GetHashCode方法的课程,获得称这种方法和计算的散列码的基础上唯一的目的性质(如身份证或所有物体字段)。

解决方案1:创建一个唯一标识的所有儿童的目的和使用,而不是的哈代码。

解决方案2:替换如果(a。GetHashCode()==b。GetHashCode())如果(a。等于(b))。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top