该OrderedDictionary
重载索引操作,使索引与整数N
将获得位置的项目N
,而与索引Object
将检索coresponding到该对象的项目。如果要创建一个OrderedDictionary<int, string>
被调用的myDict
,并以该顺序添加项目(1,“ George”)和(0,“ Fred”),应该myDict[0]
返回“ George”还是“ Fred”?
通过在键类型上施加类约束,可以解决此问题。另一方面,通用集合的许多有用性都来自它们有效使用值类型的能力。在键类型上施加类约束似乎有些丑陋。
如果该类不必与CLS兼容,而仅需与vb.net一起使用,则可能已使用了明智的设计来使用命名索引属性。因此,在上面的示例中,myDict.ByKey[0]
将产生“ Fred”,并且myDict.BySequence[0]
将产生“ George”。不幸的是,诸如C#之类的语言不支持命名索引属性。尽管即使没有这样的属性,也可能已经想出了一些允许使用上述语法的东西,但不幸的是,决定包装像Point
和Rectangle
这样的结构的字段,这意味着myDict.ByKey[0] = "Wally"
要工作,myDict.ByKey
必须返回一个新的类对象。结构会更有效,但是编译器会拒绝看起来像对只读结构的写操作(尽管该属性不会修改由...返回的结构ByKey
,而是修改它保存引用的集合)。
就我个人而言,我认为指定为跟踪插入顺序的字典式对象将是一件好事。我还希望有一个字典式的对象,该对象可以轻松返回与特定键相关联的键(这样,例如,如果一个人具有不区分大小写的字典,并添加了一个键为“ GEORGE”的记录,可以问字典与“ George”关联的键是什么,而不必搜索KeyValuePair
枚举中返回的所有对象。
SortedDictionary<TKey, TValue>
:msdn.microsoft.com/en-us/library/f7fta44c.aspx