KeyValuePair VS DictionaryEntry


117

Jaka jest różnica między KeyValuePair, która jest wersją ogólną, a DictionaryEntry?

Dlaczego KeyValuePair jest używany zamiast DictionaryEntry w ogólnej klasie Dictionary?

Odpowiedzi:


108

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;
}

4
Z pewnością jest to uogólnione?
danielcooperxyz

26
na pewno jest uogólniony (uwapniony) lub uogólniony (yankeefied)
jenson-button-event

7
Słowo, którego szukasz, jest uogólnione . ;)
Jason

5
„uogólniony”, jak w bardziej ogólnym, a nie ogólnym
TheGeekZn

2
Czy tylko ja powiedziałbym, że ogólne?
Mauro Sampietro

52

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

4
KeyValuePair to Generics, a drugi to pre-generics. Zaleca się użycie tego pierwszego, przechodząc dalej.
Gishu

1
Myślę, że rozumie, że jeden jest dla leków generycznych, a drugi dla nie-generycznych. Myślę, że jego pytanie brzmi: dlaczego potrzebujemy obu?
cdmckay

3
Jeśli o to pyta, cóż, tak naprawdę nie potrzebujemy obu - po prostu generyki nie były dostępne przed .net 2, a pozostawili rzeczy nie-generyczne w celu zapewnienia kompatybilności wstecznej. Niektórzy ludzie mogą nadal lubić używać nieogólnych rzeczy, ale nie jest to wysoce zalecane.
Chris,

Ta odpowiedź miała dla mnie więcej sensu.
Merin Nakarmi
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.