Reflection 将MakeGenericMethod传递给动态类型

Reflection 将MakeGenericMethod传递给动态类型,reflection,generic-method,Reflection,Generic Method,我试图调用一个泛型方法,需要动态地向它传递一个类型。但出现编译错误“CS0246:找不到类型或命名空间名称“t”。是否缺少using指令或程序集引用“”。请告诉我我忽略了什么,谢谢 …大体上 Type t = DiscoverType(field); // returns Type given FieldInfo via Type.GetType(string) MethodInfo method = typeof(testClass).GetMethod("MyGenericMethod

我试图调用一个泛型方法,需要动态地向它传递一个类型。但出现编译错误“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));
}
private void MyGenericMethod(FieldInfo字段)
{
字段设置值(obj,新列表(objList));
}

很难知道您到底想做什么,但您可以像这样修复编译器错误:

MethodInfo generic = method.MakeGenericMethod(t);

您可以使用
typeof
操作符将类型名称转换为
System.type
实例。在您的情况下,您已经有了所需的
系统.Type
实例,因此
typeof
在这里没有用处。

我尝试删除typeof,但我得到一个运行时错误'ArgumentNullException:Argument cannot be null',那么我猜您的
DiscoverType
方法正在返回一个空引用?如果不查看异常的堆栈跟踪,很难说。你是对的,我认为它是空的,我正在尝试按字符串获取类型…是否应键入。GetType(字符串)有效?是的,但请注意MSDN中的这一点:“要获取的类型的程序集限定名。如果类型位于当前正在执行的程序集中或Mscorlib.dll中,则提供由其命名空间限定的类型名就足够了。“我应该传递它”System.Int32“或”System.String“,不确定为什么它返回null可能是