2012-02-29 16 views
8

Quiero convertir a IList matriz: favor ver mi código:IList a la matriz en C#

IList list = new ArrayList(); 
list.Add(1); 
Array array = new Array[list.Count]; 
list.CopyTo(array, 0); 

¿Por qué me sale System.InvalidCastException: Al menos un elemento de la matriz de origen no podría ser echada hasta el tipo de matriz de destino? ¿Cómo se puede resolver suponiendo que no puedo usar ArrayList como tipo para list variable?

Actualización 1: Uso .NET 1.1. Entonces no puedo usar Generics, Linq, etc. Solo quiero recibir el resultado para el caso más común - el número entero fue dado como ejemplo, necesito que este código funcione para todos los tipos así que uso Array aquí (tal vez estoy equivocado sobre el uso de Array pero necesito, una vez más, caso común)

+3

ArrayList es obsoleto. Use 'List ' en su lugar. – asawyer

+1

¿Estás usando .NET 2.0? Si no lo eres, todo se vuelve mucho más simple con las colecciones genéricas. –

+1

http://stackoverflow.com/questions/268671/best-way-to-convert-ilist-or-ienumerable-to-array – Jason

Respuesta

26

Estás creando una matriz de Array valores. 1 es un int, no un Array. Usted debe tener:

IList list = new ArrayList(); 
list.Add(1); 
Array array = new int[list.Count]; 
list.CopyTo(array, 0); 

o, a ser posible, no utilice los tipos no genéricos para empezar ... Lista uso en lugar de ArrayList, IList<T> en lugar de IList etc.

EDIT: Tenga en cuenta que la tercera línea podría ser fácilmente:

Array array = new object[list.Count]; 

en su lugar.

+0

¡Buena captura! Estaba pensando que estaba usando un constructor en el objeto Array. –

+1

@Jon ¿Qué debo hacer si no sé el tipo de elementos en la matriz? El número entero era solo un ejemplo: necesito un enfoque más genérico (sin genéricos) –

+0

@MichaelZ: en su lugar, podría usar 'object []'. –

4

me sorprende que

Array array = new Array[list.Count]; 

incluso compila pero no hace lo que quiere. Utilice

object[] array = new object[list.Count]; 

Y, observación estándar: si se puede utilizar C# 3 o posterior, evitar ArrayList tanto como sea posible. Es probable que sea más feliz con un List<int>

+0

Se compila porque es una matriz de matrices. –

15

Puede utilizar moldeada y ToArray:

Array array = list.Cast<int>().ToArray();