Odpowiedzi:
KeyValuePair<TKey,TValue>jest używany zamiast, DictionaryEntryponieważ jest generowany. Zaletą użycia a KeyValuePair<TKey,TValue>jest to, że możemy podać kompilatorowi więcej informacji o tym, co znajduje się w naszym słowniku. Aby rozwinąć przykład Chrisa (w którym mamy dwa słowniki zawierające <string, int>pary).
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;
}
KeyValuePair <T, T> służy do iteracji po Dictionary <T, T>. To jest sposób działania .Net 2 (i nowsze).
DictionaryEntry służy do iteracji przez HashTables. To jest sposób działania .Net 1.
Oto przykład:
Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
// ...
}
Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
// ...
}