字典键是否有字符限制?

8
在.NET中,我可以使用任何字符串作为字典键吗?这是模板引擎的一部分,我计划允许用户添加自定义标题和值。
标题将类似于“X的值”或“分析&XYZ报告的摘要”,我担心如果它们包含罕见字符或类似的内容会导致异常。
我假设有大小限制,但期望它比256个字符更大。MSDN没有提供有关此主题的详细信息。
3个回答

10

字典对于用作键和值的类型没有任何特殊知识。无论对象类型如何,它都将简单地调用GetHashCodeEquals方法,以使其将值放入正确的桶中并再次检索出来。这意味着,只要正确实现了这些方法的任何类都可以用作键。

string类根据其值正确实现了这些方法,因此只要您能构造字符串的实例,就可以将其用作键。


如果没有指定其他比较器,Dictionary(of T,U) 的构造函数会检查类型T是否实现了iEquatable(of T)。如果是,则键将使用iEquatable(of T).Equals而不是Object.Equals进行比较。一般来说,这没有什么影响,但如果可继承类实现了iEquatable(of itsType),那么任何具有不同比较语义的派生类都必须重新实现iEquatable(of theEarlierType),否则可能会导致错误的结果。 - supercat

7

是的,它可以使用任何有效的字符串(长度限制为数十亿字节)。

顺便说一下,您可以传递自定义的 IEqualityComparer<T>Dictionary 构造函数中,这可能需要一个最大限制。


请确保使用正确的比较器。在System命名空间中,StringComparer具有几个不同比较器的静态属性。 - Dries Van Hansewijck

2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接