c# .net collections dictionary namevaluecollection

dictionary string string c#



NameValueCollection vs Dictionary<string, string> (3)

Posible duplicado:
IDictionary <string, string> o NameValueCollection

¿Alguna razón por la que debería usar Dictionary <string, string> en lugar de NameValueCollection?

(en C # / .NET Framework)

Opción 1, usando 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 }

Opción 2, usando 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 }

Para estos casos de uso, ¿hay alguna ventaja de usar uno frente al otro? ¿Alguna diferencia en rendimiento, uso de memoria, orden de clasificación, etc.?


El diccionario será mucho más rápido. NameValueCollection permite duplicar claves. Lo cual podría ser malo en ciertas situaciones, o deseado en otro. El diccionario no permite claves duplicadas.

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

La clase genérica Dictionary <(Of <(TKey, TValue>)>) proporciona una asignación de un conjunto de claves a un conjunto de valores. Cada adición al diccionario consiste en un valor y su clave asociada. Recuperar un valor utilizando su clave es muy rápido, cerca de O (1), porque la clase Dictionary <(Of <(TKey, TValue>)>) se implementa como una tabla hash.


NameValueCollection se escribe en serie mientras que Dictionary utiliza genéricos para permitir la varianza de tipo. Vea los beneficios de los genéricos .


No son semánticamente idénticos. NameValueCollection puede tener claves duplicadas mientras que el Dictionary no.

Personalmente, si no tienes claves duplicadas, me quedaría con el Dictionary . Es más moderno, usa IEnumerable<> lo que facilita la mezcla con las consultas de Linq . Incluso puede crear un Dictionary utilizando el ToDictionary() Linq ToDictionary() .