KeyValuePair VS DictionaryEntry


116

¿Cuál es la diferencia entre KeyValuePair que es la versión genérica y DictionaryEntry?

¿Por qué se usa KeyValuePair en lugar de DictionaryEntry en la clase Dictionary genérica?

Respuestas:


108

KeyValuePair<TKey,TValue>se usa en lugar de DictionaryEntryporque está genérico. La ventaja de usar un KeyValuePair<TKey,TValue>es que podemos darle al compilador más información sobre lo que hay en nuestro diccionario. Para ampliar el ejemplo de Chris (en el que tenemos dos diccionarios que contienen <string, int>pares).

Dictionary<string, int> dict = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in dict) {
  int i = item.Value;
}

Hashtable hashtable = new Hashtable();
foreach (DictionaryEntry item in hashtable) {
  // Cast required because compiler doesn't know it's a <string, int> pair.
  int i = (int) item.Value;
}

4
¿Seguro que es generalizado?
danielcooperxyz

26
seguramente está genérico (limeyfied), o genérico (yankeefied)
jenson-button-event

7
La palabra que estás buscando está generalizada . ;)
Jason

5
"generificado" como en más genérico no general
TheGeekZn

2
¿Soy el único que diría genérico?
Mauro Sampietro

51

KeyValuePair <T, T> es para iterar a través del Dictionary <T, T>. Esta es la forma .Net 2 (y posteriores) de hacer las cosas.

DictionaryEntry es para iterar a través de HashTables. Esta es la forma .Net 1 de hacer las cosas.

He aquí un ejemplo:

Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
  // ...
}

Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
  // ...
}

4
KeyValuePair es genérico, el otro es pregenérico. Se recomienda el uso del primero en adelante.
Gishu

1
Creo que entiende que uno es para genéricos y otro para no genéricos. Creo que su pregunta es ¿por qué necesitamos ambos?
cdmckay

3
Si eso es lo que está preguntando, bueno, realmente no necesitamos ambos, es solo que los genéricos no estaban disponibles hasta .net 2, y dejaron los productos no genéricos para que sean compatibles con versiones anteriores. A algunas personas aún les puede gustar usar cosas no genéricas, pero no es muy recomendable.
Chris

Esta respuesta tenía más sentido para mí.
Merin Nakarmi
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.