我需要使用反射在类上调用方法。该类包含同一函数的两个重载:
string GenerateOutput<TModel>(TModel model);
string GenerateOutput<TModel>(TModel model, string templateName);
我得到的方法如下:
Type type = typeof(MySolution.MyType);
MethodInfo method = typeof(MyClass).GetMethod("GenerateOutput", new Type[] {type ,typeof(string)});
MethodInfo generic = method.MakeGenericMethod(type);
该方法没有被获取(method = null
),我猜是因为第一个方法参数是泛型类型。应该如何处理?
有两个可能的问题 - 如果方法不是公共的(示例显示非公共的),则查找方法,以及处理泛型。
IMO,这是这里最简单的选择:
MethodInfo generic = typeof(MyClass).GetMethods(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Single(x => x.Name == "GenerateOutput" && x.GetParameters().Length == 2)
.MakeGenericMethod(type);
如果Single
子句不明确,则可以使其更具限制性。
在 .NET 中,使用泛型和反射时,需要提供具有如下类或方法的泛型参数的数量:
"NameOfMember`N"
其中"N"是泛型参数的计数。