views:

147

answers:

3

In .NET can I use any string as a dictionary key? This is part of a templating engine and I'm planning allow users to add their custom headers and values.

Headers will be something like "Value of X" or "Summary of Analyse & XYZ Reports", I'm worried if they would get an exception in a rare character or something like that.

I assume there size limit but expecting it to be larger than 256 characters. MSDN hasn't got any details on the subject.

+2  A: 

Yes, it can use any valid string (which is limited to a couple billion bytes).

BTW, you might pass a custom IEqualityComparer<T> that you might pass to the Dictionary constructor which might require a maximum limit.

Mehrdad Afshari
to be pedantic it's closer to 1,073,741,823 (-20 for the string overhead)
Mitch Wheat
Oops you are right. I meant bytes. Editing.
Mehrdad Afshari
Be sure to use the correct Comparer. StringComparer, in the System namespace, has a few static properties with different comparers.
Dries Van Hansewijck
+1  A: 

Since the key is just a .NET string, see this related SO question: What is the maximum possible length of a .NET string?

Mitch Wheat
+2  A: 

The dictionary doesn't have any special knowledge of the types used as its keys and values. Irrespective of the object type it will simply call the GetHashCode and Equals methods to allow it to put the value in the right bucket and retrieve it again. Which means that any class which correctly implements these methods can be used as the key.

The string class does correctly implement these methods based on its value, so as long as you can construct an instance of the string, then you can use it as the key.

Greg Beech