NameValueCollection по сравнению со Словарем <строка, строка> [дубликат]

Возможный дубликат:
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
}

Для этих вариантов использования, там какое-либо преимущество для использования один по сравнению с другим? Какая-либо разница в производительности, использование памяти, порядок сортировки, и т.д.?

92
задан Community 23 May 2017 в 12:25
поделиться

3 ответа

Они семантически не идентичны. NameValueCollection может иметь повторяющиеся ключи, в то время как словарь не может.

Лично, если у вас нет повторяющихся ключей, я бы остановился на Словаре . Он более современный, использует IEnumerable <> , что упрощает работу с запросами Linq . Вы даже можете создать Словарь , используя метод Linq ToDictionary () .

121
ответ дан 24 November 2019 в 06:33
поделиться

NameValueCollection набирается в виде строки, тогда как Dictionary использует универсальные типы, чтобы разрешить вариативность типов. См. Преимущества универсальных шаблонов .

16
ответ дан 24 November 2019 в 06:33
поделиться

Dictionary будет намного быстрее. NameValueCollection позволяет дублировать ключи. Что может быть плохо в некоторых ситуациях, или желательно в других. Словарь не позволяет дублировать ключи.

От: http://msdn.microsoft.com/en-us/library/xfhwa508.aspx

Dictionary<(Of <(TKey, TValue>)>) общий класс обеспечивает отображение от набора ключей к набору значений. Каждое добавление к словарю состоит из значения и связанного с ним ключа. Извлечение значения по его ключу происходит очень быстро, близко к O(1), потому что Dictionary<(Of <(TKey, TValue>)>) реализован как хэш-таблица.

10
ответ дан 24 November 2019 в 06:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: