我的公司广泛使用System.Collections.Specialized.NameObjectCollectionBase
类作为集合类的基础。 (我们不要质疑为什么。)我最近遇到过一种情况,我需要在特定索引处添加一个对象,但功能不存在。起初我想知道为什么我们从我们的集合类中删除了该功能,但我很快发现NameObjectCollectionBase
缺少功能!
您可以按索引(BaseGet(int index)
)访问集合中的对象
您可以通过索引(BaseRemoveAt(int index)
)从集合中删除对象
但是您无法在特定索引处插入对象。
我想不出为什么这个功能不可用的一个很好的理由。你能吗?
[更新]基础实现不仅仅是HashTable
。该集合同时维护HashTable
和ArrayList
。您可以使用Reflector验证这一点。
答案 0 :(得分:2)
因为底层实现是HashTable
并且直接插入它会破坏它(索引与密钥的散列相关)。在与键值的散列无关的序列中期望被排序的除了名称之外的散列(即,在两个其他之间存在特定元素)似乎有点奇怪。如果您需要订购,最好使用OrderedDictionary
或SortedDictionary<T,T>
。
有关NameObjectCollectionBase,OrderedDictionary和SortedDictionary<T,T>的更多信息。