OrderedDictionaryEğer aşırı indeksleme işlemi böylece bir tamsayı o indeksleme Npozisyonunda madde alacak N, bir ile dizine eklerken Objecto nesneye coresponding öğeyi alacaktır. Kimse bir oluşturmak için olsaydı OrderedDictionary<int, string>denilen myDict, ürünleri ekleyen (1, "George") ve (0, "Fred") bu sırayla, gerektiği myDict[0]"George" ya da "Fred" return?
Böyle bir sorun, anahtar tipine bir sınıf kısıtı getirilerek çözülebilirdi. Öte yandan, genel koleksiyonların kullanışlılığının çoğu, değer türleriyle verimli çalışabilmelerinden kaynaklanmaktadır. Anahtar tipine bir sınıf kısıtlaması getirmek biraz çirkin görünebilir.
Sınıfın CLS ile uyumlu olması gerekmiyordu, ancak sadece vb.net ile çalışması gerekiyorsa, adlandırılmış dizine alınmış özelliklerin kullanılması için mantıklı bir tasarım kullanılmış olabilir. Böylece, yukarıdaki örnekte myDict.ByKey[0]"Fred" myDict.BySequence[0]vermiş ve "George" vermiş olacaktı. Ne yazık ki, C # gibi diller adlandırılmış dizinlenmiş özellikleri desteklemiyor. Bir kişi, yukarıdaki sözdiziminin, bu özellikler olmadan bile kullanılmasına izin verecek bir şeyi klud etmiş olsa da, işe yaramaz hale gelmesi Pointve Rectanglebunun için myDict.ByKey[0] = "Wally"çalışmak gibi myDict.ByKeyyeni bir sınıf nesnesine geri dönmesi gerekecektir. Bir yapı daha verimli olur, ancak derleyiciler salt okunur bir yapıya yazma gibi görünen şeyleri reddederdi (mülkün döndüğü yapıyı değiştirmemesine rağmen)ByKey, ancak bunun yerine başvuruda bulunduğu koleksiyonu değiştirin).
Şahsen, ekleme sırasını takip ettiği belirtilen bir sözlük-ish nesnesinin olması güzel bir şey olacağını düşünüyorum; Ayrıca, belirli bir anahtarla ilişkilendirilmiş anahtarı kolayca döndürebilecek bir sözlük-ish nesnesine sahip olmak isterdim (bu nedenle, örneğin bir büyük küçük harf duyarlı sözlüğe sahipse ve "GEORGE" tuşuyla bir kayıt eklediyse, bir KeyValuePairbir numaralandırmada döndürülen tüm nesneleri aramak zorunda kalmadan, söz konusu anahtarın "George" ile ilişkili olduğunu sorabilir .
SortedDictionary<TKey, TValue>: msdn.microsoft.com/en-us/library/f7fta44c.aspx