将MakeGenericMethod传递为动态类型

时间:2012-05-23 04:31:16

标签: reflection generic-method

我正在尝试调用泛型方法,需要动态传递一个Type。但是得到一个编译错误,'CS0246:找不到类型或命名空间名称`t'。您是否缺少using指令或程序集引用'。请告诉我我在忽视什么,谢谢。

......主要......

Type t = DiscoverType(field);   // returns Type given FieldInfo via Type.GetType(string)

MethodInfo method = typeof(testClass).GetMethod("MyGenericMethod", BindingFlags.NonPublic | BindingFlags.Instance);
MethodInfo generic = method.MakeGenericMethod(typeof(t));
object[] args = {field};
generic.Invoke(this, args);

通用方法......

private void MyGenericMethod<T>(FieldInfo field)
{
    field.SetValue(obj, new List<T>(objList));
}

1 个答案:

答案 0 :(得分:2)

很难知道你究竟想要做什么,但你可以修复你的编译器错误:

MethodInfo generic = method.MakeGenericMethod(t);

您使用typeof运算符从类型名称转到System.Type实例。在您的情况下,您已经拥有了所需的System.Type实例,因此typeof在此处无用。