ArrayList的VS表的

StackOverflow https://stackoverflow.com/questions/391088

  •  23-08-2019
  •  | 
  •  

我看到乔恩上初始化具有未知类型通用对象:

  

如果你想有一个单一的集合   包含多个不相关类型的   值,但是,你将不得不使用   List<object>

我不比较ArrayList VS List<>,但ArrayList VS List<object>,因为两者都将被露出型object的元件。这将是在此例中使用的任一个的好处?

编辑:这是这里的类型安全没有问题,因为这两个类被暴露object作为其项目。我们仍然需要从object转换为所需的类型。我更感兴趣的不是类型安全的任何其他。

编辑:谢谢马克Gravell和Sean的答案。对不起,我只能挑1的答案,所以我会投了两个。

有帮助吗?

解决方案

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

在速度将是大约相同;结构仍将盒装等 - 所以没有多少人告诉他们分开。除了我倾向于看ArrayList为“哎呀,有人再次编写的遗留代码...” ;-p

其他提示

一个大好处是用List<object>的是,这几天大多数代码被写入使用通用类/接口。我猜想,这些天大多数人会写,需要一个IList<object>而不是IList的方法。由于ArrayList没有实现IList<object>您将无法在这些情况下使用数组列表。

我倾向于认为非泛型类/接口作为遗留码的并避免它们只要有可能。

在这种情况下,相对于ArrayList List<Object>那么你将不会注意到任何速度差异。有可能是在实际的方法对每一种可用一定的差异,尤其是在.NET 3.5和计算扩展方法,但更多的是与ArrayList的是比什么都有点过时的。

是的,除了是类型安全,泛型集合可能实际上要快。

从MSDN( http://msdn.microsoft。 COM / EN-US /库/ system.collections.generic.aspx

  

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

做一些基准测试,你会知道什么是性能最佳。我guestimate的差别非常小。

列表<>是ArrayList的一个类型安全版本。这将保证你会得到集合在同一个对象类型。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top