KeyValuePair VS DictionaryEntry


117

Genel sürüm olan KeyValuePair ile DictionaryEntry arasındaki fark nedir?

Genel Dictionary sınıfında DictionaryEntry yerine neden KeyValuePair kullanılıyor?

Yanıtlar:


108

KeyValuePair<TKey,TValue>DictionaryEntryüretildiği için yerine kullanılır . A kullanmanın avantajı KeyValuePair<TKey,TValue>, derleyiciye sözlüğümüzde ne olduğu hakkında daha fazla bilgi verebilmemizdir. Chris'in örneğini genişletmek için ( <string, int>çiftler içeren iki sözlüğümüz var ).

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
Elbette genelleştirilmiş mi?
danielcooperxyz

26
kesinlikle jenerikleştirilmiş (sınırlandırılmış) veya jenerikleştirilmiş (yankeefied)
jenson-button-event

7
Aradığınız kelime genelleştirilmiştir . ;)
Jason

5
daha genel değil genel
TheGeekZn

2
Genel diyecek tek kişi ben miyim?
Mauro Sampietro

52

KeyValuePair <T, T> Sözlük <T, T> üzerinden yineleme yapmak içindir. Bu, bir şeyler yapmanın .Net 2 (ve sonrası) yoludur.

DictionaryEntry, HashTables üzerinden yineleme yapmak içindir. Bu, işleri yapmanın .Net 1 yoludur.

İşte bir örnek:

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 Jeneriktir, diğeri ise ön jeneriktir. İlkinin kullanılması, ileri gitmeniz önerilir.
Gishu

1
Sanırım birinin jenerikler için, diğerinin de jenerik olmayanlar için olduğunu anlıyor. Sanırım sorusu neden ikisine de ihtiyacımız var?
cdmckay

3
Eğer sorduğu şey buysa, ikisine de gerçekten ihtiyacımız yok - sadece jenerikler .net 2'ye kadar mevcut değildi ve jenerik olmayan şeyleri geriye dönük uyumluluk için bıraktılar. Bazı insanlar hala jenerik olmayan şeyleri kullanmayı sevebilir, ancak bu kesinlikle tavsiye edilmez.
Chris

Bu cevap bana daha anlamlı geldi.
Merin Nakarmi
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.