为什么NameObjectCollectionBase类没有提供通过索引将对象插入集合的方法?

时间:2008-10-21 21:34:42

标签: .net-3.5

我的公司广泛使用System.Collections.Specialized.NameObjectCollectionBase类作为集合类的基础。 (我们不要质疑为什么。)我最近遇到过一种情况,我需要在特定索引处添加一个对象,但功能不存在。起初我想知道为什么我们从我们的集合类中删除了该功能,但我很快发现NameObjectCollectionBase缺少功能!

您可以按索引(BaseGet(int index))访问集合中的对象 您可以通过索引(BaseRemoveAt(int index))从集合中删除对象 但是您无法在特定索引处插入对象。

我想不出为什么这个功能不可用的一个很好的理由。你能吗?

[更新]基础实现不仅仅是HashTable。该集合同时维护HashTableArrayList。您可以使用Reflector验证这一点。

1 个答案:

答案 0 :(得分:2)

因为底层实现是HashTable并且直接插入它会破坏它(索引与密钥的散列相关)。在与键值的散列无关的序列中期望被排序的除了名称之外的散列(即,在两个其他之间存在特定元素)似乎有点奇怪。如果您需要订购,最好使用OrderedDictionarySortedDictionary<T,T>

有关NameObjectCollectionBaseOrderedDictionarySortedDictionary<T,T>的更多信息。