如何'GetMethod'匹配具有泛型参数类型的多个函数定义?



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

    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"是泛型参数的计数。

相关内容

  • 没有找到相关文章

最新更新