什么时候适合在.NET的通用列表(T)中使用数组
我一直在努力看到数组在通用列表中提供的任何好处,但我觉得我可能会遗漏一些东西。性能是让我印象深刻的一个潜在瓶颈吗?
由于
答案 0 :(得分:15)
阅读Eric Lippert撰写的这篇文章:http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx
您可能永远不会从公共属性或方法返回数组。
答案 1 :(得分:8)
我认为Eric Lippert说它比我更好:
http://blogs.msdn.com/ericlippert/archive/2008/09/22/arrays-considered-somewhat-harmful.aspx
答案 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度