Quelle est la différence entre KeyValuePair qui est la version générique et DictionaryEntry?KeyValuePair VS DictionaryEntry
Pourquoi KeyValuePair est utilisé à la place de DictionaryEntry dans la classe Dictionary?
Quelle est la différence entre KeyValuePair qui est la version générique et DictionaryEntry?KeyValuePair VS DictionaryEntry
Pourquoi KeyValuePair est utilisé à la place de DictionaryEntry dans la classe Dictionary?
KeyValuePair < T, T> est pour itération à travers le Dictionnaire < T, T>. C'est la façon de faire les choses .Net 2 (et suivantes). DictionaryEntry est pour l'itération à travers HashTables.
C'est la façon .Net 1 de faire les choses.
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)
{
// ...
}
KeyValuePair<TKey,TValue>
est utilisé à la place de DictionaryEntry
parce qu'il est generified. L'avantage d'utiliser un KeyValuePair<TKey,TValue>
est que nous pouvons donner plus d'informations au compilateur sur ce qui est dans notre dictionnaire. Pour développer l'exemple de Chris (dans lequel nous avons deux dictionnaires contenant <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;
}
+1 pour "Généré". Est-ce que c'est un mot? :-p – BFree
Sûrement c'est généralisé? – danielcooperxyz
sûrement il est générique (limeyfied), ou générique (yankeefied) –
KeyValuePair est Generics, l'autre est des pré-génériques. L'utilisation de l'ancien est recommandé en passant fwd. – Gishu
Je pense qu'il comprend que l'un est pour les génériques, et l'autre pour les non-génériques. Je pense que sa question est pourquoi avons-nous besoin des deux? – cdmckay
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 choses non-génériques pour la compatibilité ascendante. Certaines personnes peuvent toujours vouloir utiliser des choses non génériques, mais ce n'est pas vraiment recommandé. – Chris