KeyValuePair VS DictionaryEntry

В чем разница между 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)
{
  // ...
}