KeyValuePair VS DictionaryEntry


116

Was ist der Unterschied zwischen KeyValuePair, der generischen Version, und DictionaryEntry?

Warum wird KeyValuePair in der generischen Dictionary-Klasse anstelle von DictionaryEntry verwendet?

Antworten:


108

KeyValuePair<TKey,TValue>wird anstelle von verwendet, DictionaryEntryweil es generiert wird. Der Vorteil der Verwendung von a KeyValuePair<TKey,TValue>besteht darin, dass wir dem Compiler mehr Informationen darüber geben können, was sich in unserem Wörterbuch befindet. Um das Beispiel von Chris zu erweitern (in dem wir zwei Wörterbücher haben, die <string, int>Paare enthalten ).

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
Sicher ist es verallgemeinert?
Danielcooperxyz

26
sicherlich ist es generisiert (limeyfied) oder generisiert (yankeefied)
jenson-button-event

7
Das gesuchte Wort ist verallgemeinert . ;)
Jason

5
"generiert" wie in allgemeiner nicht allgemein
TheGeekZn

2
Bin ich der einzige, der generisch sagen würde?
Mauro Sampietro

51

KeyValuePair <T, T> dient zum Durchlaufen des Wörterbuchs <T, T>. Dies ist die .Net 2-Methode (und höher).

DictionaryEntry dient zum Durchlaufen von HashTables. Dies ist die .Net 1-Methode.

Hier ist ein Beispiel:

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 ist Generics, das andere ist Pre-Generics. Die Verwendung des ersteren wird empfohlen, vorwärts zu gehen.
Gishu

1
Ich denke, er versteht, dass einer für Generika und einer für Nicht-Generika ist. Ich denke, seine Frage ist, warum wir beide brauchen.
CDMckay

3
Wenn er danach fragt, brauchen wir eigentlich nicht beides - es ist nur so, dass Generika erst mit .net 2 verfügbar waren und die Nicht-Generika aus Gründen der Abwärtskompatibilität belassen wurden. Einige Leute mögen immer noch gerne das nicht generische Zeug verwenden, aber es ist nicht sehr zu empfehlen.
Chris

Diese Antwort ergab für mich mehr Sinn.
Merin Nakarmi
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.