繁体   English   中英

使用动态生成的类型创建泛型类的对象

[英]Creating an object of Generic Class with dynamically generated type

我有一个普通班

public  class MyClass<T>
{
   public List<T> Translate(List<T> list, params string[] names)
           {
            //do something here,modify list and return list
       }
    }

现在,我可以轻松创建其实例,例如

MyClass<Employee> obj= new MyClass<Employee>(); OR
MyClass<Vehicle> obj = new MyClass<Vehicle>();

我可以像这样调用我的方法

    obj.Translate(Mylist of employee or vehicle type,"param1","param2")

但就我而言,我不知道T是在运行时生成的,请参见下面的代码

String classname = string.Empty;

if(Classtype == 1)
{
    classname = "Employee"
}
else if(classtype == 2)
{
    classname = "Vehicle"
}

我想要下面的东西..以便我可以创建这个泛型类的实例

MyClass<typeof(classname)> empp = new MyClass<typeof(classname)>();

    empp.Translate(MyList,"param1","param2")

请提出建议,我该怎么做。

尝试

var someType = Type.GetType("MyProject.Employee");
var yourGenericType = typeof(MyClass<>).MakeGenericType(new [] { someType });
var instance = Activator.CreateInstance(yourGenericType);

请注意,如果您的类与执行此操作的代码不在同一个dll中,则Type.GetType(...)仅适用于类型的完整名称空间,甚至不适用于完整的程序集限定名称。

谢谢大家的帮助,我能够通过这种方式做到这一点

        var someType = Type.GetType("MyProject.Employee");
        var genericType = typeof(Convert<>).MakeGenericType(new[] { someType });
        var instance = Activator.CreateInstance(genericType);

        string instanceType = instance.GetType().FullName;

        MethodInfo methodInfo = Type.GetType(instanceType).GetMethod("Translate");
        genericType.InvokeMember(methodInfo.Name, BindingFlags.InvokeMethod | BindingFlags.Public | BindingFlags.Instance, null, instance, new object[] { lstEmp, "Name", "City" });

伊山

public T CreateEmptyObject<T>()
{
    return (T)Activator.CreateInstance(typeof(T));;
}

调用它:

YourClassObject yourClassObject = CreateEmptyObject<YourClassObject>();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM