我在Initialize generic object with unknown type看到了Jon的回复:
如果你想要一个集合 包含多个不相关的类型 但是,您必须使用这些值
List<object>
我不是在比较ArrayList
与List<>
,而是ArrayList
与List<object>
,因为两者都会展示object
类型的元素。在这种情况下使用任何一个会有什么好处?
编辑:这里不关心类型安全,因为这两个类都将object
作为其项目。还需要从object
转换为所需的类型。我对除了安全性之外的任何事情都更感兴趣。
编辑:感谢Marc Gravell和Sean的回答。对不起,我只能选1作为答案,所以我会投两票。
答案 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)
在这种情况下,ArrayList
与List<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的类型安全版本。它将保证您将在集合中获得相同的对象类型。