NameValueCollection vs Dictionary [dupliquer]

possible Duplicate:

IDictionary or NameValueCollection

est-ce une raison pour utiliser le dictionnaire au lieu de NameValueCollection?

(in C# / .NET Framework)

Option 1, en utilisant 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, en utilisant Dictionnaire ...

//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
}

Pour ces cas d'utilisation, est-il un avantage à utiliser un contre l'autre? Toute différence dans les performances, l'utilisation de la mémoire, l'ordre de tri, etc.?

84
demandé sur Community 2010-06-09 00:39:11

3 réponses

ils ne sont pas sémantiquement identiques. Le NameValueCollection peut avoir des clés dupliquées tandis que le Dictionary ne peut pas.

personnellement, si vous n'avez pas de double des clés, alors je m'en tiendrais au Dictionary . Il est plus moderne, utilise IEnumerable<> qui le rend facile à se mêler avec Linq requêtes. Vous pouvez même créer un Dictionary en utilisant la méthode Linq ToDictionary() .

108
répondu Keltex 2010-06-08 20:51:51

NameValueCollection est une chaîne de caractère tapé alors que le Dictionnaire exploite génériques pour permettre le type de la variance. Voir avantages des génériques .

16
répondu John K 2015-10-30 16:33:52

Dictionnaire sera beaucoup plus rapide. NameValueCollection permet de dupliquer les clés. Ce qui pourrait être mauvais dans certaines situations, ou souhaité dans d'autres. Le dictionnaire n'autorise pas les clés en double.

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

Le Dictionnaire<(De <(TKey, TValue>)>) classe générique fournit une cartographie de l' un jeu de clés à un ensemble de valeurs. Chacun plus de la le dictionnaire se compose de une valeur et sa clé. Récupérer une valeur en utilisant sa clé est très rapide, proche de O(1), parce que le Dictionnaire<(De <(TKey, TValue>)>) classe est implémentée comme une table de hachage.

10
répondu code4life 2010-06-08 20:59:22