sta*_*tti 4 c# dictionary types custom-type
我来自python世界,那里只有可哈希对象可以用作字典的键。C#中有类似的限制吗?可以将自定义类型用作字典键吗?
字典键的要求是可比较且可哈希化。在.NET中,这一直是乌龟,每种类型(指针类型除外)都源自System.Object,并且由于其Equals()方法,它始终具有可比性。并且由于其GetHashCode()方法而可哈希化。因此,任何.NET类型都可以自动用作键。
如果要使用自己的类型作为键,则仅在需要重新定义对象标识时才需要做一些特殊的事情。换句话说,如果您需要两个不同的对象相等的能力。然后,您将重写Equals()方法,通常比较对象的字段。然后,您还必须重写GetHashCode(),相等的对象必须生成相同的哈希码。
如果无法更改类型,或者要自定义行为(尤其是针对Dictionary),则可以将自定义IEqualityComparer <>传递给构造函数。请记住,使用自己的GetHashCode()生成的哈希码的质量决定了字典的效率。