c#3.0-我们应该使用泛型集合来提高安全性和性能吗



我们应该使用泛型集合来提高安全性和性能吗?

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

编辑:只是澄清一下:

  • 由于"它们是不同的实现"以及整个泛型/非泛型方面的原因,泛型和非泛型集合之间的性能特征略有不同。显然,通用版本避免了装箱/取消装箱以及(在大多数用例中)获取时的执行时强制转换。在实践中,这只可能对拳击发挥作用的价值类型有意义。对于大型集合,内存使用率的差异可能比执行速度的差异更重要。

  • 我对实际的类型安全方面不太在意。这当然是一件好事,但我不记得在使用非泛型集合时,因为放入了错误的类型(或将其作为错误的类型获取)而实际看到过错误。这当然是一个好处。

  • 我认为表现力非常重要。我可以浏览一个方法的声明,并知道从返回值中可以得到什么——我不需要仔细阅读文档,也不需要给变量提供笨拙的名称或文档。此外,你还可以获得Intellisense等的所有好处。关于一种语言,要问的问题之一是"我能用它表达什么?"泛型允许比以前表达更丰富的概念。

当然。

传统的集合(如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")

当直接使用集合的索引时,您还可以获得intellisense支持,而不仅仅是通用的"对象"intellisense。

简短回答:是

长话短说:使用泛型集合确实没有任何缺点。编译时类型检查消除了转换中出现运行时错误的可能性。内置类型(如整数)的性能将更高,因为不需要装箱和取消装箱(顺便说一句,与Java通用集合相反)

最新更新