The OrderedDictionary
overloads operasi pengindeksan sehingga pengindeksan dengan bilangan bulat N
akan mendapatkan item dalam posisi N
, sementara mengindeks dengan Object
akan mengambil item korespondennya ke objek. Jika seseorang membuat item yang OrderedDictionary<int, string>
dipanggil myDict
, dan menambahkan (1, "George") dan (0, "Fred") dalam urutan itu, haruskah myDict[0]
mengembalikan "George" atau "Fred"?
Masalah seperti itu bisa diselesaikan dengan memaksakan batasan kelas pada tipe kunci. Di sisi lain, banyak kegunaan koleksi generik berasal dari kemampuan mereka untuk bekerja secara efisien dengan tipe nilai. Memaksakan batasan kelas pada tipe kunci akan tampak sedikit jelek.
Jika kelas tidak harus sesuai dengan CLS tetapi hanya harus bekerja dengan vb.net, desain yang masuk akal mungkin untuk menggunakan properti bernama yang diindeks. Jadi, dalam contoh di atas, myDict.ByKey[0]
akan menghasilkan "Fred", dan myDict.BySequence[0]
akan menghasilkan "George". Sayangnya, bahasa seperti C # tidak mendukung properti yang diindeks bernama. Sementara orang bisa saja membereskan sesuatu untuk memungkinkan penggunaan sintaks di atas bahkan tanpa properti seperti itu, keputusan malang untuk membungkus bidang-bidang struktur seperti Point
dan Rectangle
berarti bahwa untuk myDict.ByKey[0] = "Wally"
bekerja, myDict.ByKey
harus mengembalikan objek kelas baru. Sebuah struct akan lebih efisien, tetapi kompiler akan menolak apa yang tampak seperti menulis ke struktur read-only (meskipun properti tidak akan memodifikasi struct yang dikembalikan olehByKey
, tetapi ganti koleksi yang menyimpan referensi).
Secara pribadi, saya pikir objek kamus-ish yang ditentukan sebagai melacak urutan penyisipan akan menjadi hal yang baik untuk dimiliki; Saya juga ingin memiliki objek kamus-ish yang dapat dengan mudah mengembalikan kunci yang terkait dengan kunci tertentu (sehingga, misalnya jika seseorang memiliki kamus case-insensitive dan telah menambahkan catatan dengan kunci "GEORGE", satu bisa bertanya pada kamus kunci apa yang dikaitkan dengan "George" tanpa harus mencari semua KeyValuePair
objek yang dikembalikan dalam enumerasi.
SortedDictionary<TKey, TValue>
: msdn.microsoft.com/en-us/library/f7fta44c.aspx