我来自 Python 世界,在这个世界中,只有可哈希对象可以用作字典的键。 C#中有类似的限制吗?可以使用自定义类型作为字典键吗?
最佳答案
字典键的要求是它是可比较的和可散列的。在 .NET 中一直是海龟,每种类型(指针类型除外)都派生自 System.Object,并且由于其 Equals() 方法,它始终具有可比性。并且由于其 GetHashCode() 方法而可散列。因此,任何 .NET 类型都可以自动用作键。
如果你想使用你自己的类型作为键,那么如果你想重新定义对象标识,你只需要做一些特殊的事情。换句话说,如果您需要使两个不同的对象相等的能力。然后您将覆盖 Equals() 方法,通常比较对象的字段。然后还必须覆盖 GetHashCode(),相等的对象必须生成相同的哈希码。
如果无法更改类型或者您想要自定义行为,特别是对于 Dictionary,那么您可以将自定义的 IEqualityComparer<> 传递给构造函数。请记住,您使用自己的 GetHashCode() 生成的哈希码的质量决定了字典的效率。
关于c# - 什么可以用作 C# 字典中的键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18653083/