KeyValuePair VS DictionaryEntry


117

Qual è la differenza tra KeyValuePair che è la versione generica e DictionaryEntry?

Perché KeyValuePair viene utilizzato al posto di DictionaryEntry nella classe Dictionary generica?

Risposte:


108

KeyValuePair<TKey,TValue>viene utilizzato al posto di DictionaryEntryperché viene generato. Il vantaggio di usare a KeyValuePair<TKey,TValue>è che possiamo fornire al compilatore maggiori informazioni su ciò che è nel nostro dizionario. Per espandere l'esempio di Chris (in cui abbiamo due dizionari contenenti <string, int>coppie).

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
Sicuramente è generalizzato?
danielcooperxyz

26
sicuramente è generico (limeyfied), o generico (yankeefied)
evento jenson-button

7
La parola che stai cercando è generalizzata . ;)
Jason

5
"generato" come in più generico non generale
TheGeekZn

2
Sono l'unico che direbbe generico?
Mauro Sampietro

52

KeyValuePair <T, T> è per l'iterazione attraverso Dictionary <T, T>. Questo è il modo .Net 2 (e successivi) di fare le cose.

DictionaryEntry è per l'iterazione attraverso HashTables. Questo è il modo .Net 1 di fare le cose.

Ecco un esempio:

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 è Generics, l'altro è pre-generics. Si consiglia di utilizzare il primo in avanti.
Gishu

1
Penso che capisca che uno è per i generici e uno per i non generici. Penso che la sua domanda sia: perché abbiamo bisogno di entrambi?
cdmckay

3
Se è quello che sta chiedendo, beh, non abbiamo davvero bisogno di entrambi - è solo che i generici non erano disponibili fino a .net 2 e hanno lasciato le cose non generiche per la compatibilità all'indietro. Ad alcune persone potrebbe piacere ancora utilizzare materiale non generico, ma non è altamente raccomandato.
Chris

Questa risposta aveva più senso per me.
Merin Nakarmi
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.