tenga en cuenta que algo va a tener que enumerar la lista de arreglo para construir el List<T>
; es solo cuestión de si lo haces tú mismo o lo dejas a algún otro método (marco/utilidad).
Si esto es un hecho aislado, la solución que se desea evitar (mediante un "in-situ" foreach
bucle para hacer la conversión) es una opción perfectamente razonable. Si te encuentras haciendo esto bastante a menudo, puedes extraerlo en un método de utilidad genérico, como en la respuesta de cdhowie.
Si su única restricción es que debe objetivo .NET 2.0 (pero puede utilizar C# 3), considere LINQBridge, que es una reimplementación de LINQ a Objetos para .NET 2.0. Esto le permitirá usar la muestra Cast
que proporcionó sin cambios. También funcionará en C# 2, pero no obtendrá los beneficios de la sintaxis del método de extensión, una mejor inferencia de tipos, etc.
Si no le importa el rendimiento, ni quiere ir a la molestia de escribir un método de utilidad, se puede utilizar el incorporado ArrayList.ToArray
método para ayudar a cabo, mediante la creación de una matriz intermediario que juega bien con List<T>
(esto no es todo lo que más corto que un foreach):
ArrayList arrayList = ...
// Create intermediary array
BookingData[] array = (BookingData[]) arrayList.ToArray(typeof(BookingData));
// Create the List<T> using the constructor that takes an IEnumerable<T>
List<BookingData> list = new List<BookingData>(array);
Finalmente, sugeriría, si es posible, abandonar el uso de las clases de colección no genéricas obsoletas.
En C# que realmente necesita para echar '' ArrayList' a list'? – khachik
@khachik: 'ArrayList' es del tipo' Object' y 'List' es un tipo genérico. – Bobby
@khachik, ambas son clases concretas en C#. –