2011-05-27 12 views
10

Hay otras preguntas como KeyValuePair vs IDictionary, pero creo que esta difiere ligeramente.KeyValuePair vs. NameValueCollection

NameValueCollection toma una clave de cadena y un valor de cadena.

KeyValuePair es como un diccionario, dígale de qué tipo es la clave y el valor.

No entiendo por qué existe NameValueCollection. Inicializar un KeyValuePair con tipos de cadenas parece suficiente. También noté que NameValueCollection tiene más métodos disponibles, pero ¿por qué no fusionar ambas clases en una sola?

+10

Un 'KeyValuePair' no como un diccionario. Es simplemente una tupla que contiene la clave y el valor. –

+0

@pst, un diccionario toma una lista de pares clave/valor. No veo la diferencia. –

+0

@Nick 'var kvp = new KeyValuePair (" Hola "," ¡Mundo! ")' - [KeyValuePair ] (http://msdn.microsoft.com/en-us/library/5tbh8a42. aspx) –

Respuesta

13

A KeyValuePair no como un diccionario. Es simplemente una tupla que contiene la clave y el valor.

NameValueCollection es envoltorio sobre lo asciende a un IList<KeyValuePair<string,IList<string>>> (tenga en cuenta que NameValueCollection anterior genéricos) - operaciones como Get(string) son O(n) y artículos se pueden traer índice y cada uno de los mapas de llave de una o más Valores (esto difiere de a Dictionary<string,string>).

Una razón de esto se explica en the NameValueCollection documentation:

Esta clase se puede utilizar para las cabeceras, cadenas de consulta y datos de formularios.

El "reemplazo" datos de estructura nueva con algunos comportamiento similar para NameValueCollection es Lookup<string,string>. (Sin embargo, no admite directamente las mismas operaciones que las notas inmutables).

Happy coding.

+1

El principal problema con la búsqueda en este escenario es que es inmutable, a diferencia de NaveValueCollection, que se puede agregar. Como tal, no es realmente un "reemplazo", pero tiene un comportamiento similar. – spender

3

NameValueCollection existente en .NET 1.0 y 1.1, KeyValuePair es un tipo genérico y no se agregó a .NET hasta 2.0. Todas las clases en System.Collections.Specialized son anteriores a la adición de genéricos; contiene ciertos caracteres fuertemente tipados (especializados si se quiere) para usarlos cuando eso es exactamente lo que necesita para que los usuarios no tengan que convertir el objeto en una cadena.

0

KeyValuePair es el componente que se utiliza para iterar una Dictionary

var dictionary = new Dictionary<int,long> 

foreach(var kvp in dictionary) 
{ 
    // kvp is KeyValuePair<int,long>. kvp.Key is the int key and kvp.Value is the long value for the key 
} 

NameValueCollection es indexable.

Cuestiones relacionadas