OrderedDictionary
overloads การดำเนินงานการจัดทำดัชนีเพื่อให้การจัดทำดัชนีที่มีจำนวนเต็ม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