动态类型实例创建

时间:2016-12-02 16:11:03

标签: c# .net dynamic types casting

我在使用动态类型实例化自定义类时遇到问题。 例如,我有以下类:

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”。

1 个答案:

答案 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);