2010-01-16 15 views
75

¿Es posible obtener el siguiente código? Sé que no funciona, pero me pregunto si hay una solución alternativa.Creación de una instancia de tipo genérico <T> con una variable que contiene el tipo

Type k = typeof(double); 
List<k> lst = new List<k>(); 
+0

poco confundido por su comentario "esto se puede lograr en C# 4.0." No puede, al menos no en la forma en que lo demuestras. C# 4 todavía requiere que se especifiquen los parámetros de tipo genérico en tiempo de compilación; aún no puede pasar una variable Tipo como un parámetro de tipo genérico. – itowlson

+1

Por favor, frasee las cosas como una pregunta cuando sea una pregunta. El código especificado no se puede lograr con C# 4.0. –

+1

Pregunta similar: http://stackoverflow.com/questions/687363/how-do-i-create-a-generic-class-from-a-string-in-c –

Respuesta

112

Sí, hay:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+0

Creo que esto es lo que quiero. Déjame revisar y marcaré la tuya como la respuesta momentáneamente. – Chris

+3

Creo que el principal problema aquí es que usted no describe lo que quiere * nosotros *. Usted nos muestra un intento fallido de * algo * y luego le pregunta cómo lograr * lo que desea *. Si quiere respuestas, y no adivina, debe describir lo que debe hacer, en lugar de cómo intentó hacerlo. –

+0

Esto debería funcionar, gracias. – Chris

3

una forma más limpia podría ser el uso de un método genérico. Hacer algo como esto:

static void AddType<T>() 
    where T : DataObject 
{ 
    Indexes.Add(typeof(T), new Dictionary<int, T>()); 
} 
0

Prueba esto:

var genericListType = typeof(List<>); 
var specificListType = genericListType.MakeGenericType(typeof(double)); 
var list = Activator.CreateInstance(specificListType); 
+1

Gracias por tomar el tiempo para contribuir con una respuesta. Es gracias a los compañeros útiles como usted que podemos aprender juntos como una comunidad. Aquí hay algunos consejos sobre cómo hacer que su respuesta sea excelente: [Cómo escribo una buena respuesta] (https://stackoverflow.com/help/how-to-answer) – Brien

Cuestiones relacionadas