仅使用反射按类型参数区分泛型方法?

时间:2014-05-27 15:21:43

标签: c# generics reflection

我正在尝试使用反射来获取类的特定MethodInfo,但我不确定如何区分以下两种方法:

public class Test
{
    public IBar<T1> Foo<T1>();
    public IBar<T1, T2> Foo<T1, T2>();
}

假设我知道类型参数的数量,我怎样才能获得对不同Foo方法的引用?只需调用typeof(Test).GetMethod(“Foo”)将抛出一个异常,即方法名称不明确,并且没有不同数量的参数需要检查。

1 个答案:

答案 0 :(得分:5)

您可以获取所有方法,然后根据通用参数计数过滤它们:

typeof(Test).GetMethods()
.First(x => x.Name == "Foo" && x.GetGenericArguments().Length == 2);

请注意,如果没有满足条件的方法,First方法将抛出异常。如果您想避免,可以使用FirstOrDefault并检查 null 异常。

相关问题