2008-12-24 14 views
44

vi esta respuesta de Jon en Initialize generic object with unknown type:ArrayList vs Lista <object>

Si desea una sola colección de contienen múltiples tipos relacionados de valores, sin embargo, usted tendrá que usar List<object>

no estoy comparando ArrayList vs List<>, pero ArrayList vs List<object>, ya que tanto estará exponiendo elementos de tipo object. ¿Cuál sería el beneficio de usar cualquiera de los dos en este caso?

EDITAR: Aquí no importa la seguridad del tipo, ya que ambas clases exponen object como su artículo. Todavía se necesita lanzar desde object al tipo deseado. Estoy más interesado en cualquier cosa que no sea seguridad tipo.

EDITAR: Gracias Marc Gravell y Sean por la respuesta. Lo siento, solo puedo elegir 1 como respuesta, así que votaré ambos.

Respuesta

69

Usted será capaz de utilizar los métodos de extensión de LINQ directamente con List<object>, pero no con ArrayList, a menos que se inyecte un Cast<object>()/OfType<object> (gracias a IEnumerable<object> vs IEnumerable). Eso vale un poco, incluso si no necesita seguridad tipo, etc.

La velocidad será más o menos la misma; las estructuras seguirán encasilladas, etc., así que no hay mucho más que las distinga. Excepto que tiendo a ver ArrayList como "Ups, alguien está escribiendo el código heredado de nuevo ..." ;-p

-4

La lista <> es una versión segura de ArrayList. Garantizará que obtendrá el mismo tipo de objeto en la colección.

+1

Obviamente no me refiero al tipo de seguridad aquí – faulty

5

Sí, además de ser tipo seguro, las colecciones genéricas pueden ser más rápidas.

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

El System.Collections.Generic espacio de nombres contiene interfaces y clases que definen genéricos colecciones, que permiten a los usuarios crear colecciones inflexible de tipos que proporcionan una mejor tipo seguridad y rendimiento que no genérico fuertemente colecciones tipadas.

+2

'' Lista no le dará mucho en el camino de las mejoras a la seguridad de tipos y el rendimiento sobre el uso de un 'ArrayList' La mayor parte de estas mejoras son específicos de' Lista 'donde T es cualquier cosa excepto' objeto'. – Brian

38

Una gran ventaja de usar List<object> es que en la actualidad la mayoría del código está escrito para utilizar las clases/interfaces genéricas. Sospecho que en estos días la mayoría de las personas escriben un método que toma un IList<object> en lugar de un IList. Como ArrayList no implementa IList<object>, no podría usar una lista de arreglos en estos escenarios.

Tiendo a pensar en las clases/interfaces no genéricas como código heredado y las evito siempre que sea posible.

+0

Ese era un ángulo en el que no pensé, buena captura. –

11

En este caso, ArrayList contra List<Object>, entonces no notará ninguna diferencia en la velocidad. Puede haber algunas diferencias en los métodos reales disponibles en cada uno de estos, en particular en .NET 3.5 y métodos de extensión de conteo, pero eso tiene más que ver con que ArrayList está algo obsoleto que cualquier otra cosa.

1

Realice una evaluación comparativa y sabrá qué funciona mejor. Considero que la diferencia es muy pequeña.

+0

en realidad no estoy seguro de si la pregunta es sobre el rendimiento, pero ese es un buen punto. mi suposición es que el arraylist perf sería peor debido al boxeo adicional, unboxing. –

+0

@Anonymous: ¿Qué boxeo adicional? 'ArrayList' y' List 'deben tener la misma cantidad de boxeo/unboxing. – Brian

+0

"una sola colección que contiene múltiples tipos de valores no relacionados" - entendí que al agregar diferentes tipos a un objeto de la colección Lista había un boxeo/unboxing que ocurría, mientras que con el arraylist no había. Supongo que estoy equivocado sobre esto. –

Cuestiones relacionadas