gpt4 book ai didi

c# - .NET Dictionary 使用什么来散列引用?

转载 作者:行者123 更新时间:2023-11-30 18:56:01 27 4
gpt4 key购买 nike

所以我正在考虑使用引用类型作为 .NET 字典的键...

示例:

class MyObj
{
private int mID;
public MyObj(int id)
{
this.mID = id;
}
}

// whatever code here
static void Main(string[] args)
{
Dictionary<MyObj, string> dictionary = new Dictionary<MyObj, string>();
}

我的问题是,如何为自定义对象(即不是 int、string、bool 等)生成散列?我问是因为在我需要再次在字典中查找内容之前,我用作键的对象可能会发生变化。如果散列是从对象的地址生成的,那么我可能没问题……但如果它是从对象的成员变量的某种组合生成的,那我就有麻烦了。

编辑:

我本来应该明确表示在这种情况下我不关心对象的相等性......我只是在寻找快速查找(我想进行 1-1 关联而不更改涉及的类的代码)。

谢谢

最佳答案

GetHashCode/Equals 的默认实现主要处理身份。您总是会从同一个对象获得相同的散列值,并且它可能与其他对象不同(非常高的可能性!)。

换句话说,如果您只需要引用标识,就可以了。如果您想使用将键视为的字典(即使用对象中的数据,而不仅仅是对象引用本身来确定相等性的概念),那么变异是个坏主意将键添加到字典后键中的任何相等敏感数据。

object.GetHashCode 的 MSDN 文档有点过于可怕 - 基本上您不应该将它用于持久性哈希(即在进程调用之间保存)但它对于同一个对象将是一致的,这是它成为字典的有效散列所必需的。虽然不能保证它是唯一的,但我认为您不会遇到足够多的集合而导致问题。

关于c# - .NET Dictionary<T,T> 使用什么来散列引用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1266469/

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