NameValueCollection vs Dictionary<строка, строка>

Возможный дубликат:
IDictionary или NameValueCollection

Любая причина, я должен использовать словарь<строка, строка> вместо NameValueCollection?

(в C# / .NET Framework)

Вариант 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<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
}

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

3 ответа

Решение

Они не семантически идентичны. NameValueCollection может иметь дубликаты ключей в то время как Dictionary не могу.

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

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

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

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

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

Другие вопросы по тегам