В чем разница между KeyValuePair, которая является общей версией и DictionaryEntry?KeyValuePair VS DictionaryEntry
Почему KeyValuePair используется вместо DictionaryEntry в классе общего словаря?
В чем разница между KeyValuePair, которая является общей версией и DictionaryEntry?KeyValuePair VS DictionaryEntry
Почему KeyValuePair используется вместо DictionaryEntry в классе общего словаря?
KeyValuePair < T, T> для итерации через словарь < T, T>. Это - .Net 2 (и далее) способ делать вещи.
DictionaryEntry предназначен для итерации через хэш-таблицы. Это способ .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)
{
// ...
}
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's a <string, int> pair.
int i = (int) item.Value;
}
+1 для "generified". Это вообще слово? :-p – BFree
Наверняка это обобщено? – danielcooperxyz
наверняка это обобщенное (limeyfied) или обобщенное (yankeefied) –
KeyValuePair - это дженерики, другие - предипики. Рекомендуется использовать первый вариант fwd. – Gishu
Я думаю, он понимает, что он предназначен для дженериков, а другой для не-дженериков. Я думаю, что его вопрос заключается в том, почему нам нужны оба? – cdmckay
Если это то, о чем он спрашивает, нам действительно не нужны оба - это просто, что дженерики недоступны до .net 2, и они оставили материал без дженериков для обратной совместимости. Некоторым людям по-прежнему нравится использовать не-общий материал, но его не рекомендуется. – Chris