ArrayList vs List <object> </object>

时间:2008-12-24 09:30:19

标签: c# .net list arraylist

我在Initialize generic object with unknown type看到了Jon的回复:

  

如果你想要一个集合   包含多个不相关的类型   但是,您必须使用这些值   List<object>

我不是在比较ArrayListList<>,而是ArrayListList<object>,因为两者都会展示object类型的元素。在这种情况下使用任何一个会有什么好处?

编辑:这里不关心类型安全,因为这两个类都将object作为其项目。还需要从object转换为所需的类型。我对除了安全性之外的任何事情都更感兴趣。

编辑:感谢Marc Gravell和Sean的回答。对不起,我只能选1作为答案,所以我会投两票。

6 个答案:

答案 0 :(得分:73)

您可以直接使用List<object>使用LINQ扩展方法,但不能使用ArrayList,除非您注入Cast<object>() / OfType<object>(感谢{ {1}} vs IEnumerable<object>)。即使您不需要类型安全等,这也是值得的。

速度大致相同;结构仍然是盒装等等 - 所以没有什么可以区分它们。除了我倾向于将IEnumerable视为“oops,有人再次编写遗留代码......”; - p

答案 1 :(得分:41)

使用List<object>的一大好处是,现在大多数代码都是使用泛型类/接口编写的。我怀疑,现在大多数人都会编写一个方法,而IList<object>代替IList。由于ArrayList未实现IList<object>,因此您无法在这些方案中使用数组列表。

我倾向于将非泛型类/接口视为遗留代码,并尽可能避免使用它们。

答案 2 :(得分:11)

在这种情况下,ArrayListList<Object>相比,您不会注意到速度上的任何差异。可能在这些方法中可用的实际方法存在一些差异,特别是在.NET 3.5和计数扩展方法中,但这与ArrayList的关系比其他任何方法都要多。

答案 3 :(得分:5)

是的,除了类型安全之外,通用集合实际上可能更快。

来自MSDN(http://msdn.microsoft.com/en-us/library/system.collections.generic.aspx

  

System.Collections.Generic   namespace包含接口和   定义泛型的类   集合,允许用户   创建强类型集合   提供更好的类型安全性   性能比非泛型强   打字集合。

答案 4 :(得分:1)

做一些基准测试,你会知道什么是最好的。我猜想差异非常小。

答案 5 :(得分:-4)

列表与LT;&GT;是ArrayList的类型安全版本。它将保证您将在集合中获得相同的对象类型。