2011-08-19 19 views

risposta

2

t è un oggetto di tipo creato in fase di esecuzione. I generici si aspettano un nome di tipo, risolto in fase di compilazione. Per creare un generico in fase di esecuzione, è necessario utilizzare MakeGenericType

Ad esempio:

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

t è un'istanza oggetto di tipo Type, vale a dire qualcosa che esiste solo in fase di esecuzione. I generici lavorano in fase di compilazione e si aspettano il nome del tipo.

Penso che si accetta che il seguente non ha senso:

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

E per lo stesso motivo, non è possibile passare un'istanza del tipo come parametro di un generico.

1

Type è una classe che rappresenta un tipo piuttosto che realmente essere uno, quindi non è possibile utilizzare un'istanza di Type in un luogo che si aspetta un parametro di tipo o tipo.

0

si dovrebbe fare qualcosa di simile:

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