我们应该使用Generic Collection来提高安全性和性能吗?

时间:2008-11-05 06:45:32

标签: c#-3.0

我们应该使用Generic Collection来提高安全性和性能吗?

3 个答案:

答案 0 :(得分:5)

当然。你为什么不呢?比IMO更重要的是,通用API更具表现力。这通常适用于通用API,而不仅仅是集合。

编辑:只是澄清一下:

  • 由于“它们是不同的实现”以及整个通用/非通用方面的原因,通用和非通用集合之间的性能特征略有不同。显然,通用版本避免了装箱/拆箱和(在大多数使用情况下)获取时的执行时间。在实践中,这对于拳击发挥作用的价值类型来说可能很重要。对于大型集合,它的内存使用量差异可能比执行 speed 差异更大。

  • 我对实际的类型安全方面感到不安。这当然是一件好事,但我记不起在使用非通用集合时实际上看到了一个错误,因为它输入了错误的类型(或者将其作为错误的类型获取)。这当然是一个好处。

  • 我将表现力视为非常重要。我可以看一下方法的声明并知道返回值会有什么期望 - 我不需要非常仔细地阅读文档,或者给变量提供非常笨拙的名称或文档。此外,您还可以获得Intellisense等的所有好处。关于语言的一个问题是“我能在其中表达什么?”和泛型允许表达比以前更丰富的概念。

答案 1 :(得分:2)

绝对

传统集合(如ArrayList)隐式存储对象。

这意味着,这样做:

ArrayList list = new ArrayList();
list.Add(5);
list.Add("FooBar");

是合法代码。这引入了一些问题。

  • 通常,您不希望在同一个集合中存储不同的类型,并且对此进行编译时检查很不错。
  • 存储值类型(例如上面的整数5)时,必须先将其装入引用类型,然后才能将其存储在集合中。
  • 读取值时,必须将其从Object转换回所需的类型。

但是,您通过使用通用集合消除了所有这些问题:

List<int> list = new List();
list.Add(5);
// Compile Time Error.
list.Add("FooBar")

在直接使用集合的索引时,您也可以获得智能感知支持,而不仅仅是通用的“对象”智能感知。

答案 2 :(得分:1)

简答:是的

更长的答案:使用通用集合确实没有缺点。编译时类型检查消除了转换时运行时错误的可能性。内置类型(如整数)的性能会更高,因为不需要装箱和拆箱(顺便提一下,与Java通用集合相比)