我需要使用反射调用类的方法。该类包含两个相同函数的重载:
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
),我猜是因为第一个方法参数是泛型类型。应如何处理?
答案 0 :(得分:4)
有两个可能的问题 - 如果方法是非公开的(示例显示非公开的),并处理泛型,则可以找到方法。
IMO,这是最简单的选择:
MethodInfo generic = typeof(MyClass).GetMethods(
BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance)
.Single(x => x.Name == "GenerateOutput" && x.GetParameters().Length == 2)
.MakeGenericMethod(type);
如果Single
子句不明确,可以使{{1}}子句更具限制性。
答案 1 :(得分:1)
在.NET中,使用泛型和反射时,需要提供有多少通用参数的类或方法,如下所示:
"NameOfMember`N"
其中“N”是通用参数'count。