如何获得所有可能的重载方法的签名?

How do I get the signatures of all possible overloaded methods?

我想获取一个对象数组,其中包含 class 中某个方法的所有可能的重载方法签名。例如,如果我们有:

public class SomeClass {
    ...
    public void SomeMethod() { ... }
    public void SomeMethod(int i) { ... }
    public void SomeMethod(string s) { ... }
}

如何找到所有可能的参数信息?我尝试使用:

MethodInfo method = type.GetMethod(methodName);
ParameterInfo[] possibleParameterInfos = method.GetParameters();
foreach (ParameterInfo possibleParameterInfo in possibleParameterInfos)
{
    Console.WriteLine(possibleParameterInfo.ParameterType);
}

但我没有得到我想要的。

你想要 GetMethods 而不是 GetMethod

MethodInfo[] methods = type.GetMethods()
                           .Where(x => x.Name == "SomeMethod")
                           .ToArray();

然后您可以在每个 MethodInfo 上调用 GetParameters 以获取每个方法的签名。

foreach(var mi in methods)
{
    foreach(var p in mi.GetParameters())
    {
        Console.Write(p.ParameterType + ",");
    }
    Console.WriteLine();
}