Possible Duplicate:
IDictionary<string, string> or NameValueCollection
Any reason I should use Dictionary<string,string> instead of NameValueCollection?
(in C# / .NET Framework)
Option 1, using NameValueCollection:
//enter values:
NameValueCollection nvc = new NameValueCollection()
{
{"key1", "value1"},
{"key2", "value2"},
{"key3", "value3"}
};
// retrieve values:
foreach(string key in nvc.AllKeys)
{
string value = nvc[key];
// do something
}
Option 2, using Dictionary<string,string>...
//enter values:
Dictionary<string, string> dict = new Dictionary<string, string>()
{
{"key1", "value1"},
{"key2", "value2"},
{"key3", "value3"}
};
// retrieve values:
foreach (KeyValuePair<string, string> kvp in dict)
{
string key = kvp.Key;
string val = kvp.Value;
// do something
}
For these use cases, is there any advantage to use one versus the other? Any difference in performance, memory use, sort order, etc.?
They aren't semantically identical. The
NameValueCollection
can have duplicate keys while theDictionary
cannot.Personally if you don't have duplicate keys, then I would stick with the
Dictionary
. It's more modern, usesIEnumerable<>
which makes it easy to mingle withLinq
queries. You can even create aDictionary
using theLinq
ToDictionary()
method.NameValueCollection is string typed whereas Dictionary leverages generics to allow type variance. See Benefits of Generics.
Dictionary will be much faster. NameValueCollection allows duplicate keys. Which could be bad in certain situations, or desired in other. Dictionary does not allow duplicate keys.
From: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx