ArrayList vs List <object>

fau*_*lty 46 .net c# list arraylist

我看到Jon在初始化未知类型的通用对象时的回复:

但是,如果您希望单个集合包含多个不相关的值类型,则必须使用 List<object>

我不是比较ArrayListvs List<>,而是ArrayListvs List<object>,因为两者都将暴露类型的元素object.在这种情况下使用任何一个会有什么好处?

编辑:这里不关心类型安全,因为这两个类都是object作为它的项目暴露.仍然需要从object所需的类型转换.除了类型安全之外,我对其他任何事情都更感兴趣.

编辑:谢谢马克格拉维尔和肖恩的答案.对不起,我只能选1作为答案,所以我会投两票.

Mar*_*ell 74

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

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


Sea*_*ean 42

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

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


ang*_*son 11

在这种情况下,ArrayList相对于List<Object>那时你不会注意到速度上的任何差异.可能在这些方法中可用的实际方法存在一些差异,特别是在.NET 3.5和计数扩展方法中,但这更多地与ArrayList相比有些不赞成.


Tam*_*ege 5

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

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

System.Collections.Generic 命名空间包含接口和定义泛型集合,它允许用户创建强类型集合能提供比非泛型强类型集合更好的类型安全和性能等级.

  • `List <object>`与使用`ArrayList`相比,对类型安全性和性能的改进没有太多帮助.这些改进中的大多数特定于`List <T>`,其中T是除`object`之外的任何东西. (2认同)