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.