gpt4 book ai didi

C# 如何为违反 Equals 契约的类选择 Hashcode?

转载 作者:行者123 更新时间:2023-11-30 14:44:07 24 4
gpt4 key购买 nike

我有多个类,由于某些原因,它们不遵循官方的 Equals 约定。在覆盖的 GetHashCode() 中,这些类只返回 0,因此它们可以在 Hashmap 中使用。

其中一些类实现了相同的接口(interface),并且存在使用该接口(interface)作为键的 Hashmap。所以我认为每个类至少应该在 GetHashCode() 中返回一个不同的(但仍然不变的)值。

问题是如何选择这个值。我应该简单地让第一个类返回 1,下一个类返回 2 等等吗?或者我应该尝试类似的东西

class SomeClass : SomeInterface {
public overwrite int GetHashCode() {
return "SomeClass".GetHashCode();
}
}

所以哈希分布更均匀? (我必须自己缓存返回值还是微软的编译器可以优化这个?)

更新:不可能为每个对象返回单独的哈希码,因为 Equals 违反了约定。具体来说,我指的是 this problem .

最佳答案

如果它“违反了 Equals 契约”,那么我不确定您是否应该将它用作 key 。

如果某物正在使用它作为键,您确实需要获得正确的散列...Equals 逻辑是什么非常不清楚,但是两个值被认为是相等的必须具有相同的散列码。不要求具有相同散列码的两个值相等。

使用常量字符串并没有多大帮助——你会得到在类型上平均分配的值,但仅此而已......

关于C# 如何为违反 Equals 契约的类选择 Hashcode?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/835321/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com