2009-06-05 9 views
28

Necesito crear un objeto genérico basado en un tipo que está almacenado en una base de datos. ¿Cómo puedo lograr esto? El código de abajo (que no se compilará) explica lo que quiero decir:Crear un objeto genérico basado en una variable Tipo

string typeString = GetTypeFromDatabase(key); 
Type objectType = Type.GetType(typeString); 

//This won't work, but you get the idea! 
MyObject<objectType> myobject = new MyObject<objectType>(); 

¿Es posible hacer este tipo de cosas?

Gracias

Respuesta

53
Type type = typeof(MyObject<>).MakeGenericType(objectType); 
object myObject = Activator.CreateInstance(type); 

También - mirar hacia fuera; Type.GetType(string) solo verifica el ensamblaje de ejecución y algunos ensambles del sistema; no escanea todo. Si usa un nombre calificado para montaje, debería estar bien; de lo contrario, primero deberá obtener el Assembly y usar someAssembly.GetType(string).

+0

¿Tiene el objeto que está creando tiene que tener un constructor que no toma ningún argumento? – Charlie

+2

@Charlie Probablemente haya resuelto esto en el año transcurrido, pero para completar, no, puede usar otros constructores con [Activator.CreateInstance] (http://msdn.microsoft.com/en-us/library/wcxyzt4d .aspx) '(Tipo, params Objeto [])'. –

6

Qué hacer si tengo que llamar a una función de myObject como

Type type = typeof(MyObject<>).MakeGenericType(objectType); 
object myObject = Activator.CreateInstance(type); 
myobject.SetValue("1212"); 
Cuestiones relacionadas