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 the Dictionary
cannot.
Personally if you don't have duplicate keys, then I would stick with the Dictionary
. It's more modern, uses IEnumerable<>
which makes it easy to mingle with Linq
queries. You can even create a Dictionary
using the Linq
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
The Dictionary<(Of <(TKey, TValue>)>)
generic class provides a mapping from
a set of keys to a set of values. Each
addition to the dictionary consists of
a value and its associated key.
Retrieving a value by using its key is
very fast, close to O(1), because the
Dictionary<(Of <(TKey, TValue>)>)
class is implemented as a hash table.