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

本文关键字:类型参数区 泛型方法 反射 | 更新日期: 2023-09-27 18:05:36

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

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

如果我知道类型参数的数量,我如何获得对不同Foo方法的引用?只要调用typeof(Test). getmethod ("Foo")就会抛出一个异常,即方法名是不明确的,并且没有不同数量的参数需要检查。

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

您可以获取所有方法,然后根据泛型参数计数对它们进行过滤:

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

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