KeyValuePair VS DictionaryEntry


117

Apa perbedaan antara KeyValuePair yang merupakan versi generik dan DictionaryEntry?

Mengapa KeyValuePair digunakan sebagai pengganti DictionaryEntry di kelas Dictionary generik?

Jawaban:


108

KeyValuePair<TKey,TValue>digunakan sebagai pengganti DictionaryEntrykarena itu dibuat. Keuntungan menggunakan a KeyValuePair<TKey,TValue>adalah kita dapat memberi kompiler lebih banyak informasi tentang apa yang ada di kamus kita. Untuk memperluas contoh Chris (di mana kami memiliki dua kamus yang berisi <string, int>pasangan).

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
Tentunya itu digeneralisasikan?
danielcooperxyz

26
pasti itu generik (limeyfied), atau genericized (yankeefied)
jenson-button-event

7
Kata yang Anda cari bersifat umum . ;)
Jason

5
"dihasilkan" seperti yang lebih umum bukan umum
TheGeekZn

2
Apakah saya satu-satunya yang akan mengatakan umum?
Mauro Sampietro

52

KeyValuePair <T, T> adalah untuk iterasi melalui Dictionary <T, T>. Ini adalah cara .Net 2 (dan seterusnya) dalam melakukan sesuatu.

DictionaryEntry adalah untuk melakukan iterasi melalui HashTables. Ini adalah cara .Net 1 dalam melakukan sesuatu.

Berikut contohnya:

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 adalah Generik, yang lainnya adalah pra-generik. Penggunaan yang pertama disarankan pergi fwd.
Gishu

1
Saya pikir dia mengerti bahwa satu untuk obat generik, dan satu lagi untuk non-generik. Saya pikir pertanyaannya adalah mengapa kita membutuhkan keduanya?
cdmckay

3
Jika itu yang dia tanyakan, kita tidak benar-benar membutuhkan keduanya - hanya saja obat generik tidak tersedia sampai .net 2, dan mereka meninggalkan hal-hal non-generik untuk kompatibilitas mundur. Beberapa orang mungkin masih suka menggunakan hal-hal non-generik, tetapi itu tidak terlalu direkomendasikan.
Chris

Jawaban ini lebih masuk akal bagi saya.
Merin Nakarmi
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.