KeyValuePair VS DictionaryEntry


117

Яка різниця між KeyValuePair, яка є загальною версією, та DictionaryEntry?

Чому KeyValuePair використовується замість DictionaryEntry в загальному класі словника?

Відповіді:


108

KeyValuePair<TKey,TValue>використовується замість того, DictionaryEntryщо він узагальнений. Перевага використання a 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;
}

4
Звичайно, це узагальнено?
danielcooperxyz

26
напевно, це узагальнене (ваміфіковане) або генерізоване (yankeefied)
jenson-button-event

7
Слово, яке ви шукаєте, узагальнене . ;)
Джейсон

5
"узагальнений", як у більш загальному, не загальному
TheGeekZn

2
Я єдиний, хто сказав би загальне?
Mauro Sampietro

51

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)
{
  // ...
}

4
KeyValuePair - це дженеріки, інший - догенерики. Використовувати попередній рекомендується за допомогою fwd.
Гішу

1
Я думаю, що він розуміє, що один - для дженериків, а один - для негенеріків. Я думаю, його питання полягає в тому, навіщо нам потрібно обоє?
cdmckay

3
Якщо це він запитує, ну, нам насправді не потрібно обох - це просто те, що генерики були доступні до .net 2, і вони залишили негенеричні матеріали для зворотної сумісності. Деяким людям все-таки подобається вживати неполітичні речі, але це не рекомендується.
Кріс

Ця відповідь мала більше сенсу для мене.
Merin Nakarmi
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.