我在使用动态类型实例化自定义类时遇到问题。 例如,我有以下类:
public class myClass<T>
{
public myClass(String header);
}
如果我使用以下代码,一切正常:
var myInstance = new myClass<int>("myHeader");
但是,我处于一个我没有定义int
类型的位置,因此我需要从泛型类型参数动态转换它。到目前为止我尝试了什么:
1
Type myType = typeof(int);
var myInstance = new myClass<myType>("myHeader");
2
int myInt = 0;
Type myType = myInt.GetType();
var myInstance = new myClass<myType>("myHeader");
在所有示例中,我都收到以下错误:
找不到类型或命名空间名称'myType'(您是否缺少using指令或程序集引用?)
我不能直接使用int
的原因是因为我在运行时从特定程序集加载类型,所以它们在任何时候都不会是“int”。
答案 0 :(得分:0)
要在运行时创建generic
列表,您必须使用Reflection。
int myInt = 0;
Type myType = myInt.GetType();
// make a type of generic list, with the type in myType variable
Type listType = typeof(List<>).MakeGenericType(myType);
// init a new generic list
IList list = (IList) Activator.CreateInstance(listType);
更新1:
int myInt = 0;
Type myType = myInt.GetType();
Type genericClass = typeof(MyClass<>);
Type constructedClass = genericClass.MakeGenericType(myType);
String MyParameter = "value";
dynamic MyInstance = Activator.CreateInstance(constructedClass, MyParameter);