OrderedDictionaryoverloads การดำเนินงานการจัดทำดัชนีเพื่อให้การจัดทำดัชนีที่มีจำนวนเต็มNจะได้รับรายการในตำแหน่งNในขณะที่การจัดทำดัชนีที่มีObjectจะดึงรายการ coresponding ไปยังวัตถุที่ หากมีการสร้างรายการที่ถูกOrderedDictionary<int, string>เรียกmyDictและเพิ่ม (1, "George") และ (0, "Fred") ตามลำดับควรmyDict[0]ส่งคืน "George" หรือ "Fred" หรือไม่
ปัญหาดังกล่าวอาจได้รับการแก้ไขโดยกำหนดข้อ จำกัด ของประเภทคีย์ ในทางกลับกันประโยชน์ส่วนใหญ่ของคอลเลกชันทั่วไปเกิดจากความสามารถในการทำงานกับประเภทของค่าได้อย่างมีประสิทธิภาพ การกำหนดข้อ จำกัด ของคลาสในประเภทคีย์นั้นดูน่าเกลียดเล็กน้อย
หากคลาสนั้นไม่จำเป็นต้องเป็นไปตาม CLS แต่เพียงต้องทำงานกับ vb.net การออกแบบที่สมเหตุสมผลอาจต้องใช้คุณสมบัติของดัชนีที่มีชื่อ ดังนั้นในตัวอย่างข้างต้นmyDict.ByKey[0]จะได้ผล "เฟร็ด" และmyDict.BySequence[0]จะให้ผล "จอร์จ" น่าเสียดายที่ภาษาอย่าง C # ไม่รองรับคุณสมบัติที่จัดทำดัชนีไว้ ในขณะที่ใครคนหนึ่งอาจมีบางอย่างที่ทำให้การใช้ไวยากรณ์ข้างต้นแม้จะไม่มีคุณสมบัติเช่นนี้ แต่การตัดสินใจที่โชคร้ายที่ห่อหุ้มโครงสร้างของสิ่งที่ชอบPointและRectangleหมายความว่าสำหรับmyDict.ByKey[0] = "Wally"การทำงานmyDict.ByKeyจะต้องส่งคืนคลาสวัตถุใหม่ struct จะมีประสิทธิภาพมากขึ้น แต่คอมไพเลอร์จะปฏิเสธสิ่งที่ดูเหมือนว่าเขียนไปยังโครงสร้างแบบอ่านอย่างเดียว (แม้ว่าจะมีคุณสมบัติที่จะไม่แก้ไข struct ที่ส่งกลับโดยByKeyแต่ให้ปรับเปลี่ยนคอลเล็กชันที่อ้างอิงไว้)
โดยส่วนตัวฉันคิดว่าวัตถุพจนานุกรม - ish ที่ระบุไว้ในการติดตามคำสั่งการแทรกจะเป็นสิ่งที่ดีที่จะมี; ฉันต้องการที่จะมีวัตถุ dictionary-ish ซึ่งสามารถคืนค่าคีย์ที่เชื่อมโยงกับคีย์เฉพาะได้อย่างง่ายดาย (เช่นถ้ามีพจนานุกรมตัวพิมพ์เล็กและตัวพิมพ์ใหญ่และเพิ่มบันทึกด้วยคีย์ "GEORGE" สามารถถามพจนานุกรมว่าคีย์ใดเกี่ยวข้องกับ "จอร์จ" โดยไม่ต้องค้นหาKeyValuePairวัตถุทั้งหมดที่ส่งคืนด้วยการแจงนับ
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx