ArrayList vs List

Vi esta respuesta de Jon en Inicializar objeto genérico con tipo desconocido :

Sin embargo, si desea que una sola colección contenga múltiples tipos de valores no relacionados, deberá usar List

No estoy comparando ArrayList vs List , pero ArrayList vs List , ya que ambos estarán 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 el object como su elemento. Todavía se necesita lanzar desde el 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.

Podrá utilizar los métodos de extensión LINQ directamente con List , pero no con ArrayList , a menos que se inyecte un Cast() / OfType de IEnumerable (gracias a IEnumerable versus 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 a ArrayList como “oops, alguien está escribiendo código heredado nuevamente …” ;-p

Un gran beneficio del uso de List es que actualmente la mayoría del código está escrito para usar las clases / interfaces genéricas. Sospecho que en estos días la mayoría de la gente escribiría un método que tomara un IList lugar de un IList . Como ArrayList no implementa IList , no podrá 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.

En este caso, ArrayList vs. List , 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.

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

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

El espacio de nombres System.Collections.Generic contiene interfaces y clases que definen colecciones genéricas, que permiten a los usuarios crear colecciones fuertemente tipadas que proporcionan un mejor tipo de seguridad y rendimiento que las colecciones fuertemente genéricas no genéricas.

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

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