何时在.NET中使用Generic.Lists上的Array()

时间:2009-01-05 14:03:25

标签: .net

什么时候适合在.NET的通用列表(T)中使用数组

我一直在努力看到数组在通用列表中提供的任何好处,但我觉得我可能会遗漏一些东西。性能是让我印象深刻的一个潜在瓶颈吗?

由于

8 个答案:

答案 0 :(得分:15)

阅读Eric Lippert撰写的这篇文章:http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx

您可能永远不会从公共属性或方法返回数组。

答案 1 :(得分:8)

答案 2 :(得分:3)

我现在将无耻地复制我编辑的very similar question asked here today的答案:

  

我想指出这一点   数组具有协方差,通用   列表没有。例如,一个数组   类型MyChildClass[]可以很容易   转移到MyParentClass[],同时   List<MyChildClass>无法投放   到List<MyParentClass>,至少不是   直接

     

如果您需要协方差,请使用   数组,使用LINQ的Cast()方法或   投射每个项目的其他一些方法   单独

答案 3 :(得分:2)

当您使用固定数量的给定类型的对象时,与List类关联的小性能命中没有意义,因为您不会使用它的任何功能。

答案 4 :(得分:1)

使用常规数组的另一个原因是,当您使用平台调用(执行非托管c / c ++代码)时,这仅限于一小组应用程序

另外,作为备注:如果数组的大小已知,但您仍想使用通用列表,请不要忘记将大小传递给构造函数的capacity参数。

例如:

List<int> lst = new List<int> (100);

否则,列表将以非常小的容量开始,并且需要多次分配新的内存块,而不是一次分配所需的空间。

答案 5 :(得分:0)

许多更高级别的数据结构(包括List)在内部使用数组,这是将原始序列存储在内存中的唯一方法 - 因此数组必须存在于编程语言中,否则您将无法使用更高级别的数据结构

我的意见是,除非你必须(例如因为你使用的是需要它的组件),否则你永远不应该使用数组 - 特别是不要编写返回数组的代码是接受数组作为参数,所以你不要强迫其他人也使用数组。

唯一的例外(在我看来)是罕见的情况,你需要一个已知的固定大小的集合作为局部变量,而不是使用其他东西似乎是浪费。

答案 6 :(得分:0)

据我们所知,数组是一种原始的数据结构,如果你需要在中间位置插入或删除元素,以及排序它,通常在过时的语言中需要程序员这样做,而不是在你工作时使用像DotNet Generics这样的List对象,所有这些操作都已经完成了。

不仅如此,数组非常有限,只有相同的数据类型元素等。

对于目前的计算日,我没有看到使用数组的优势。

问候。

答案 7 :(得分:0)

如果要缓存固定数量的数据,请使用数组。否则,使用通用列表...它们更容易使用,提供更多的灵活性,并且键入(不需要装箱/拆箱)......简单。此外,数组是固定长度,而列表可以是可变的,并随时更改。原因可以继续使用通用列表与数组的原因。数组只是一个痛苦的屁股。老实说,使用列表与数组的性能可能会被讨论到n度