关于c#:仅使用反射按类型参数区分泛型方法?

Differentiate generic methods by type parameters only using reflection?

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

1
2
3
4
5
public class Test
{
    public IBar<T1> Foo<T1>();
    public IBar<T1, T2> Foo<T1, T2>();
}

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


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

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

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