subir que prozac pristiq peso pastillas mirtazapina medicamentos lexapro las hacen fluoxetina engordan engorda aumento antidepresivos .net vb.net generics reflection .net-2.0

.net - que - mirtazapina engorda



¿Cuál es la mejor manera de crear un genérico a partir de su nombre? (3)

El artículo de MSDN Cómo: Examinar y crear instancias de tipos genéricos con reflexión describe cómo puede usar Reflection para crear una instancia de un tipo genérico. Usar eso junto con la muestra de Marksus debería ayudarte a comenzar.

Suponiendo que solo tengo el nombre de clase de un genérico como una cadena en la forma de "MyCustomGenericCollection (de MyCustomObjectClass)" y no conozco el ensamblaje del que proviene, ¿cuál es la forma más fácil de crear una instancia de ese objeto?

Si ayuda, sé que la clase implementa IMyCustomInterface y es de un ensamblado cargado en el AppDomain actual.

Markus Olsson dio un excelente ejemplo aquí , pero no veo cómo aplicarlo a los genéricos.


Si no te importa traducir a VB.NET, algo como esto debería funcionar

foreach (Assembly assembly in AppDomain.CurrentDomain.GetAssemblies()) { // find the type of the item Type itemType = assembly.GetType("MyCustomObjectClass", false); // if we didnt find it, go to the next assembly if (itemType == null) { continue; } // Now create a generic type for the collection Type colType = assembly.GetType("MyCusomgGenericCollection").MakeGenericType(itemType);; IMyCustomInterface result = (IMyCustomInterface)Activator.CreateInstance(colType); break; }


Una vez que lo analice, use Type.GetType (cadena) para obtener una referencia a los tipos involucrados, luego use Type.MakeGenericType (Type []) para construir el tipo genérico específico que necesita. Luego, use Type.GetConstructor (Type []) para obtener una referencia a un constructor para el tipo genérico específico, y finalmente llame a ConstructorInfo.Invoke para obtener una instancia del objeto.

Type t1 = Type.GetType("MyCustomGenericCollection"); Type t2 = Type.GetType("MyCustomObjectClass"); Type t3 = t1.MakeGenericType(new Type[] { t2 }); ConstructorInfo ci = t3.GetConstructor(Type.EmptyTypes); object obj = ci.Invoke(null);