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

C# 是否仅使用反射按类型参数区分泛型方法?,c#,generics,reflection,C#,Generics,Reflection,我试图使用反射来获取类的特定MethodInfo,但不确定如何区分以下两种方法: public class Test { public IBar<T1> Foo<T1>(); public IBar<T1, T2> Foo<T1, T2>(); } 假设我知道类型参数的数量,如何获得对不同Foo方法的引用?仅调用typeofTest.GetMethodFoo将引发一个异常,即方法名称不明确,并且没有不同数量的参数要检查。您可以获取

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

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

假设我知道类型参数的数量,如何获得对不同Foo方法的引用?仅调用typeofTest.GetMethodFoo将引发一个异常,即方法名称不明确,并且没有不同数量的参数要检查。

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

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

请注意,如果没有满足条件的方法,第一个方法将引发异常。如果要避免异常,可以使用FirstOrDefault并检查null。

这可能会有所帮助。+1。不过,我倾向于交换.Where调用中的比较子句。这样,您只能为具有您要查找的名称的方法调用GetGenericArguments。GetGenericArguments正是我找不到的。谢谢