c# - 什么可以用作 C# 字典中的键?

标签 c# dictionary types custom-type

我来自 Python 世界,在这个世界中,只有可哈希对象可以用作字典的键。 C#中有类似的限制吗?可以使用自定义类型作为字典键吗?

最佳答案

字典键的要求是它是可比较的和可散列的。在 .NET 中一直是海龟,每种类型(指针类型除外)都派生自 System.Object,并且由于其 Equals() 方法,它始终具有可比性。并且由于其 GetHashCode() 方法而可散列。因此,任何 .NET 类型都可以自动用作键。

如果你想使用你自己的类型作为键,那么如果你想重新定义对象标识,你只需要做一些特殊的事情。换句话说,如果您需要使两个不同的对象相等的能力。然后您将覆盖 Equals() 方法,通常比较对象的字段。然后还必须覆盖 GetHashCode(),相等的对象必须生成相同的哈希码。

如果无法更改类型或者您想要自定义行为,特别是对于 Dictionary,那么您可以将自定义的 IEqualityComparer<> 传递给构造函数。请记住,您使用自己的 GetHashCode() 生成的哈希码的质量决定了字典的效率。

关于c# - 什么可以用作 C# 字典中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653083/

相关文章:

javascript - 使用 Javascript 从 HTML 表中获取字段

.net - 可以清除或禁用 .NET MethodInfo 缓存吗?

c# - RavenDB 加载相关数据不起作用

python - 计算行日期之前 x 天的出现次数

opengl - haskell 与 Data.Map 更新有关的问题

python - 使用字典作为映射器创建 pandas 系列

types - 如何在 postscript 文件中嵌入真正的字体

c# - 声音API仅支持播放PCM波形文件

c# - 为具有 List 对象属性的模型生成创建 View

c# - 能否从某种方法名称集合创建 C# 4.0 中的多播委托(delegate)?