题
我看到乔恩上初始化具有未知类型通用对象:
如果你想有一个单一的集合 包含多个不相关类型的 值,但是,你将不得不使用
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的一个类型安全版本。这将保证你会得到集合在同一个对象类型。