C# ArrayList vs List<;对象>;
我从Jon的回复中看到: 如果您想创建单个集合 包含多个不相关类型的 但是,您必须使用C# ArrayList vs List<;对象>;,c#,.net,list,arraylist,C#,.net,List,Arraylist,我从Jon的回复中看到: 如果您想创建单个集合 包含多个不相关类型的 但是,您必须使用 列表 我不是比较ArrayList与List,而是比较ArrayList与List,因为两者都将公开对象类型的元素。在这种情况下,使用任何一种都有什么好处 编辑:这里不考虑类型安全,因为这两个类都将对象作为其项公开。仍然需要从对象转换为所需类型。我对类型安全以外的任何东西都更感兴趣 编辑:谢谢马克·格雷威尔和肖恩的回答。对不起,我只能选择1作为答案,所以我将同时投票。列表是ArrayList的类型安全版本。它
列表
我不是比较ArrayList
与List
,而是比较ArrayList
与List
,因为两者都将公开对象类型的元素。在这种情况下,使用任何一种都有什么好处
编辑:这里不考虑类型安全,因为这两个类都将对象
作为其项公开。仍然需要从对象
转换为所需类型。我对类型安全以外的任何东西都更感兴趣
编辑:谢谢马克·格雷威尔和肖恩的回答。对不起,我只能选择1作为答案,所以我将同时投票。列表是ArrayList的类型安全版本。它将保证在集合中获得相同的对象类型。是的,除了类型安全之外,泛型集合实际上可能更快
来自MSDN()
系统.Collections.Generic
命名空间包含接口和
定义泛型的类
集合,它允许用户
创建强类型集合
提供更好的类型安全性和
性能比非泛型强
类型化集合
使用List
的一大好处是,现在大多数代码都是使用泛型类/接口编写的。我怀疑现在大多数人都会编写一个方法,它采用IList
而不是IList
。由于ArrayList
没有实现IList
,因此在这些场景中您将无法使用数组列表
我倾向于将非泛型类/接口视为遗留代码,并尽可能避免使用它们。在这种情况下,ArrayList
与List
相比,您不会注意到速度上的任何差异。每种方法的实际可用方法可能存在一些差异,特别是在.NET 3.5和计数扩展方法中,但这更多地与ArrayList被弃用有关。您可以将LINQ扩展方法直接用于列表,但不能用于ArrayList
,除非插入类型为
的Cast()
/(感谢IEnumerable
vsIEnumerable
)。这是值得的,即使你不需要类型安全等
速度大致相同;结构仍然会被装箱,等等-所以没有太多其他的东西来区分它们。除了我倾向于将ArrayList
视为“哎呀,有人又在写遗留代码了……”-p做一些基准测试,你就会知道什么表现最好。我估计差别很小 很明显,我这里指的不是类型安全,实际上我不确定问题是关于性能的,但这是一个很好的观点。我猜arraylist性能会因为额外的装箱、拆箱而变得更差。@Anonymous:什么额外的装箱ArrayList
和List
应该具有相同数量的装箱/取消装箱。“单个集合包含多个不相关的值类型”-我的理解是,当向列表集合对象添加不同类型时,会发生装箱/取消装箱,而ArrayList则不会。我想我错了。List
与使用ArrayList
相比,在改进类型安全性和性能方面没有给您带来太多帮助。大多数这些改进都是针对List
的,其中t是除对象
之外的任何东西。