KeyValuePair VS DictionaryEntry


117

อะไรคือความแตกต่างระหว่าง KeyValuePair ซึ่งเป็นเวอร์ชันทั่วไปและ DictionaryEntry?

เหตุใดจึงใช้ KeyValuePair แทน DictionaryEntry ในคลาส Dictionary ทั่วไป

คำตอบ:


108

KeyValuePair<TKey,TValue>ถูกใช้แทนDictionaryEntryเนื่องจากมีการระบุชื่อ ข้อดีของการใช้ a KeyValuePair<TKey,TValue>คือเราสามารถให้ข้อมูลเพิ่มเติมเกี่ยวกับสิ่งที่อยู่ในพจนานุกรมของเราแก่คอมไพเลอร์ได้ เพื่อขยายตัวอย่างของคริส (ซึ่งเรามีพจนานุกรมสองเล่มที่มี<string, int>คู่)

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
มันเป็นเรื่องทั่วไปแน่ ๆ ?
danielcooperxyz

26
แน่นอนว่ามันเป็นชื่อสามัญ (limeyfied) หรือ genericized (yankeefied)
jenson-button-event

7
คำที่คุณกำลังค้นหาทั่วไป ;)
Jason

5
"generified" เหมือนทั่วไปมากกว่าไม่ใช่ทั่วไป
TheGeekZn

2
ฉันเป็นคนเดียวที่พูดแบบทั่วไปหรือเปล่า?
Mauro Sampietro

52

KeyValuePair <T, T> ใช้สำหรับการทำซ้ำผ่านพจนานุกรม <T, T> นี่คือวิธีการทำสิ่งต่างๆ. Net 2 (เป็นต้นไป)

DictionaryEntry ใช้สำหรับการทำซ้ำผ่าน HashTables นี่คือวิธีการทำสิ่งต่างๆ. Net 1

นี่คือตัวอย่าง:

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 คือ Generics ส่วนอื่น ๆ เป็นแบบ pre-generics แนะนำให้ใช้อดีตไปที่ fwd
Gishu

1
ฉันคิดว่าเขาเข้าใจว่าสิ่งหนึ่งมีไว้สำหรับยาชื่อสามัญและอีกอย่างหนึ่งสำหรับยาชื่อสามัญ ฉันคิดว่าคำถามของเขาคือทำไมเราถึงต้องการทั้งสองอย่าง?
cdmckay

3
ถ้านั่นคือสิ่งที่เขาถามเราก็ไม่ต้องการทั้งสองอย่างจริงๆมันเป็นเพียงชื่อสามัญที่ใช้ไม่ได้จนถึง. net 2 และพวกเขาก็ทิ้งสิ่งที่ไม่ใช่ยาสามัญไว้เพื่อความเข้ากันได้แบบย้อนกลับ บางคนอาจยังชอบใช้ของที่ไม่ใช่ของทั่วไป แต่ไม่แนะนำอย่างยิ่ง
คริส

คำตอบนี้เหมาะสมกับฉันมากขึ้น
Merin Nakarmi
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.