是否仍然存在使用非泛型集合的情况?

时间:2011-04-04 16:21:57

标签: .net

除了将任何类型存储为对象并将其存储在非泛型集合中的明显原因外,还有其他原因仍然使用非泛型集合。

到目前为止,除了向旧软件的向后兼容性之外,我发现除了在.NET框架中保留这些类型的集合之外,没有其他目的。

它似乎只会创造更多的作品,因为你不断从类型对象拳击和解拳到它的原始类型,反之亦然。

此外,您遇到的问题有时候不记得对象的原始数据类型是以什么开头的(例如Double,Float,Decimal)。事实上,这必须是我在PHP开发时遇到的问题之一。

类型安全似乎是开发现代应用程序的方法,因为我已经创建了很多并且从未被强制使用它们中的任何一个(非泛型集合)。

或许还有其他原因我不知道这些收藏是否必要?显然,在尝试通过.NET认证考试时,包含了一个原因。只是不确定为什么。有人可以说清楚这个问题吗?

3 个答案:

答案 0 :(得分:3)

除了遗产或第三方支持之外,基本上,当你被迫使用它们时我没有其他理由。

答案 1 :(得分:2)

从个人经验来看,我从未使用过.NET 2.0以来的非通用集合 - 只有当我需要演示拳击或类似的时候。

一个用例可能是一个包含异构项目的集合,尽管您总是可以使用List<object>

答案 2 :(得分:2)

这样做的理由很少。

关于我有时使用其中一个非泛型集合的唯一论点是HashtableDictionary<object,object>之间存在潜在的性能差异。这实际上是由于实施方面的差异,即described in detail on MSDN here

话虽这么说,我仍然通常使用Dictionary<T,U> - 除非有一个非常具体的原因Hashtable提供某种类型的优势,并且这种优势可以通过真实的测量来证明数据集。总的来说,性能足够相似,我在现实世界的实现中很少发现问题。在我的大部分测试中,Dictionary<T,U>优于Hashtable(我确信,这也是微软的调查结果,因此他们决定改为基于链接的实现),但在某些情况下Hashtable 1}}可以更快。