当前位置:  开发笔记 > 编程语言 > 正文

何时在c#中使用ArrayList而不是array []?

如何解决《何时在c#中使用ArrayList而不是array[]?》经验,为你挑选了4个好方法。

我经常使用ArrayList而不是'正常' array[].

当我使用时ArrayList,我觉得好像在欺骗(或者懒惰),什么时候可以使用ArrayList一个阵列?



1> Bob..:

数组是强类型的,并且可以作为参数使用.如果您知道集合的长度并且已修复,则应使用数组.

ArrayLists不是强类型的,每次Insertion或Retrial都需要一个强制转换来恢复原始类型.如果您需要一个方法来获取特定类型的列表,ArrayLists就会失败,因为您可以传入包含任何类型的ArrayList.ArrayLists在内部使用动态扩展的数组,因此在内部数组达到其容量时也会扩展内部数组的大小.

你真正想要使用的是通用列表List.这具有Array和ArrayLists的所有优点.它是强类型的,它支持可变长度的项目.


ArrayList不使用LinkedList作为内部数据结构!它使用向量,该向量是在添加/插入/删除操作时动态调整大小的数组.

2> Tamas Czineg..:

除了鲍勃和弗雷德里克的回应,我想指出虽然数组有协方差,但通用列表却没有.例如,类型的阵列MyChildClass[]可以容易地浇铸MyParentClass[],而List不能浇铸List,至少不能直接.

如果你需要协方差,要么使用数组,要使用LINQ的Cast()方法或其他方法单独转换每个项目或等待C#4.



3> Marc Gravell..:

另一个想法是变异; array(T[])完全可变,无法保护.List没有提供任何有用的扩展点,但像Collection(或许多其他IList实现)这样的东西允许你添加代码,例如,在添加项目之前检查项目; 同样,您可以拥有只读IList实现,这对于需要不变性的线程安全非常有用.

我倾向于在内部方法逻辑(可能作为局部变量),作为params参数,或在一些高度优化的情况下使用数组,我知道项目的长度,我知道代码选择不改变它(作为一个私人领域).除此之外,List等往往更常见,因为它们在添加/删除项目时的开销要小得多.



4> Michael Borg..:

除非代码的那部分绝对是性能关键的,否则使用ArrayList非常好.


好吧,1.1也许......你应该一般瞄准2.0中的List
推荐阅读
帆侮听我悄悄说星星
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有