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.