如何在匹配具有通用参数类型的多个函数定义中“GetMethod”?

时间:2011-05-09 08:31:16

标签: .net generics reflection

我需要使用反射调用类的方法。该类包含两个相同函数的重载:

    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),我猜是因为第一个方法参数是泛型类型。应如何处理?

2 个答案:

答案 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。