2011-08-19 7 views

Respuesta

2

t es un objeto Type creado en tiempo de ejecución. Los genéricos esperan un nombre de tipo, resuelto en tiempo de compilación. Para crear un genérico en tiempo de ejecución, usted tiene que utilizar MakeGenericType

Por ejemplo:

Activator.CreateInstance(typeof(GenericThing<>).MakeGenericType(t)); 
2

t es una instancia de objeto de tipo Type, es decir, algo que sólo existe en tiempo de ejecución. Los genéricos funcionan en tiempo de compilación y esperan el nombre del tipo.

Creo que usted está de acuerdo que la siguiente no tiene sentido:

Type t = thing.GetType() 
TypeOfThing instance = new t(); 

Y por la misma razón, no se puede pasar una instancia de tipo que el parámetro de un genérico.

1

Type es una clase que representa un tipo en lugar de realmente estar uno, por lo que no se puede utilizar una instancia de Type en un lugar que espera un parámetro de tipo o tipo.

0

que debe hacer algo como esto:

var youGeneric = typeof(GenericThing<>).MakeGenericType(t) 
             .GetConstructor(Type.EmptyTypes) 
             .Invoke(null); 
Cuestiones relacionadas