Возможный дубликат:
IDictionary <строка, строка> или NameValueCollectionКакая-либо причина я должен использовать Словарь <строка, строка> вместо NameValueCollection?
(в C# / Платформа.NET)
Опция 1, с помощью 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 }
Опция 2, с помощью Словаря <строка, строка>...
//enter values: Dictionary
dict = new Dictionary () { {"key1", "value1"}, {"key2", "value2"}, {"key3", "value3"} }; // retrieve values: foreach (KeyValuePair kvp in dict) { string key = kvp.Key; string val = kvp.Value; // do something } Для этих вариантов использования, там какое-либо преимущество для использования один по сравнению с другим? Какая-либо разница в производительности, использование памяти, порядок сортировки, и т.д.?
Они семантически не идентичны. NameValueCollection
может иметь повторяющиеся ключи, в то время как словарь
не может.
Лично, если у вас нет повторяющихся ключей, я бы остановился на Словаре
. Он более современный, использует IEnumerable <>
, что упрощает работу с запросами Linq
. Вы даже можете создать Словарь
, используя метод Linq
ToDictionary ()
.
NameValueCollection набирается в виде строки, тогда как Dictionary использует универсальные типы, чтобы разрешить вариативность типов. См. Преимущества универсальных шаблонов .
Dictionary будет намного быстрее. NameValueCollection позволяет дублировать ключи. Что может быть плохо в некоторых ситуациях, или желательно в других. Словарь не позволяет дублировать ключи.
От: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx
Dictionary<(Of <(TKey, TValue>)>) общий класс обеспечивает отображение от набора ключей к набору значений. Каждое добавление к словарю состоит из значения и связанного с ним ключа. Извлечение значения по его ключу происходит очень быстро, близко к O(1), потому что Dictionary<(Of <(TKey, TValue>)>) реализован как хэш-таблица.