KeyValuePair VS DictionaryEntry


117

Quelle est la différence entre KeyValuePair qui est la version générique et DictionaryEntry?

Pourquoi KeyValuePair est-il utilisé à la place de DictionaryEntry dans la classe Dictionary générique?

Réponses:


108

KeyValuePair<TKey,TValue>est utilisé à la place de DictionaryEntryparce qu'il est généré. L'avantage d'utiliser a KeyValuePair<TKey,TValue>est que nous pouvons donner au compilateur plus d'informations sur le contenu de notre dictionnaire. Pour développer l'exemple de Chris (dans lequel nous avons deux dictionnaires contenant des <string, int>paires).

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
Sûrement c'est généralisé?
danielcooperxyz

26
il est sûrement générique (limeyfied) ou générique (yankeefied)
jenson-button-event

7
Le mot que vous recherchez est généralisé . ;)
Jason

5
"generified" comme plus générique pas général
TheGeekZn

2
Suis-je le seul à dire générique?
Mauro Sampietro

52

KeyValuePair <T, T> est pour itérer dans Dictionary <T, T>. C'est la façon de faire .Net 2 (et au-delà).

DictionaryEntry sert à parcourir les HashTables. C'est la façon de faire .Net 1.

Voici un exemple:

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 est générique, l'autre est pré-générique. L'utilisation du premier est recommandée pour aller plus loin.
Gishu

1
Je pense qu'il comprend que l'un est destiné aux génériques et l'autre aux non génériques. Je pense que sa question est de savoir pourquoi avons-nous besoin des deux?
cdmckay

3
Si c'est ce qu'il demande, eh bien, nous n'avons pas vraiment besoin des deux - c'est juste que les génériques n'étaient pas disponibles avant .net 2, et ils ont laissé les éléments non génériques pour une compatibilité ascendante. Certaines personnes peuvent toujours aimer utiliser des éléments non génériques, mais ce n'est pas fortement recommandé.
Chris

Cette réponse avait plus de sens pour moi.
Merin Nakarmi
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.