В чем разница между KeyValuePair, которая является общей версией и DictionaryEntry?
Почему KeyValuePair используется вместо DictionaryEntry в универсальном классе Dictionary?
Ответ 1
KeyValuePair<TKey,TValue> используется вместо DictionaryEntry, потому что он генерируется. Преимущество использования KeyValuePair<TKey,TValue> заключается в том, что мы можем предоставить компилятору больше информации о том, что есть в нашем словаре. Чтобы расширить пример Криса (в котором у нас есть два словаря, содержащие пары <string, int>).
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 a <string, int> pair.
int i = (int) item.Value;
}
Ответ 2
KeyValuePair < T, T > для итерации через словарь < T, T > . Это способ делать .Net 2 (и так далее).
DictionaryEntry предназначен для итерации через HashTables. Это способ .Net 1 делать.
Вот пример:
Dictionary<string, int> MyDictionary = new Dictionary<string, int>();
foreach (KeyValuePair<string, int> item in MyDictionary)
{
// ...
}
Hashtable MyHashtable = new Hashtable();
foreach (DictionaryEntry item in MyHashtable)
{
// ...
}