ArrayList vs List <object>

我看到Jon在初始化具有未知types的通用对象时的回复:

如果你想要一个集合包含多个不相关的值types,你将不得不使用List<object>

我没有比较ArrayList vs List<> ,但ArrayList vs List<object> ,因为两者都将暴露typesobject元素。 在这种情况下使用其中一种会有什么好处?

编辑:这里没有关注types安全,因为这两个类都暴露object作为它的项目。 仍然需要从object投射到所需的types。 除了types安全以外,我更感兴趣。

编辑:谢谢Marc Gravell和肖恩的答案。 对不起,我只能select1作为答案,所以我会投两个。

除非注入Cast<object>() / OfType<object> (感谢IEnumerable<object> vs IEnumerable ),否则您将能够直接使用LINQ扩展方法与List<object> ,但不能与ArrayList一起使用。 即使你不需要types安全等,这也是值得的。

速度将大致相同; 结构仍然是盒装等 – 所以没有什么别的可以告诉他们分开。 除了我倾向于将ArrayList视为“oops,有人正在编写遗留代码…”; -p

使用List<object>一个很大的好处是,现在大多数代码都是使用generics类/接口编写的。 我怀疑现在大多数人会写一个采用IList<object>而不是IList 。 由于ArrayList没有实现IList<object> ,所以在这些场景中不能使用数组列表。

我倾向于将非generics类/接口看作遗留代码,并尽可能地避免它们。

在这种情况下, ArrayListList<Object>然后你将不会注意到速度的任何差异。 实际可用的方法在.NET 3.5和计数扩展方法上可能存在一些差异,但这与ArrayList比其他任何东西都有所不同。

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

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

System.Collections.Generic命名空间包含定义generics集合的接口和类,它们允许用户创build强types的集合,与非generics强types集合相比,可以提供更好的types安全性和性能。

做一些基准testing,你会知道什么效果最好。 我很抱歉,差别非常小。

List <>是ArrayList的types安全版本。 这将保证你将获得相同的对象types的集合。