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.