从String中获取Type T.

时间:2014-04-22 09:19:25

标签: c# generics types casting

我有方法:

void EmberIU<T>() where T : Form
{
    for (int i = 0; i < ins.Length; i++)
        ins[i].Click += delegate { ShowForm<T>("arg")); };
}

我可以使用该方法,如:

var thing = Type.GetType("namespace.class");

EmberIU<thing>()

2 个答案:

答案 0 :(得分:2)

您需要使用Type.MakeGenericType(params Type[])方法(请参阅此处:http://msdn.microsoft.com/en-us/library/system.type.makegenerictype%28v=vs.110%29.aspx

例如:

Type yourType = Type.GetType("namespace.class");
Type emberType = typeof(EmberIU<>).MakeGenericType(yourType);

答案 1 :(得分:0)

不,你不能。必须在编译时定义type参数。

如果要实现此功能,则必须使用Reflection。看看Jon Skeets answer