2010-05-14 14 views
17

Necesito crear un tipo genérico, pero no sé el tipo en tiempo de compilación. Me gustaría hacer esto:Inicializar objeto genérico desde un System.Type

Type t = typeof(whatever); 
var list = new List<t> 

esto no se compilará, porque t no es un tipo válido. Pero sí sabe todo sobre un tipo válido. ¿Hay alguna manera de crear dinámicamente la lista genérica de un System.Type como este? Es posible que necesite reflexión, y está bien, estoy un poco perdido aquí.

Respuesta

24

De esta manera:

Type t; 
Type genericListType = typeof(List<>).MakeGenericType(t); 
object list = Activator.CreateInstance(genericListType); 

Tenga en cuenta que sólo se puede asignar a una variable de tipo object. (Aunque puede convertir a la interfaz IList no genérica)

Para usar la variable list, probablemente necesite una reflexión.

+1

+1 No sabía 'List <>' era legal en absoluto. muy genial. –

+1

@Igot: solo en 'typeof'. – SLaks

+0

Esto funciona muy bien, excepto que es un dolor utilizar después. Obtiene el trabajo hecho sin embargo. – captncraig

Cuestiones relacionadas