Как вы можете получить имена параметров метода?

Если у меня есть метод, например:

public void MyMethod(int arg1, string arg2)

Как мне получить фактические имена аргументов? Я не могу найти ничего в MethodInfo, который фактически даст мне имя параметра.

Я хотел бы написать метод, который выглядит так:

public static string GetParamName(MethodInfo method, int index)

Итак, если я вызвал этот метод с помощью:

string name = GetParamName(MyMethod, 0)

он вернет "arg1". Возможно ли это?

Ответ 1

public static string GetParamName(System.Reflection.MethodInfo method, int index)
{
    string retVal = string.Empty;

    if (method != null && method.GetParameters().Length > index)
        retVal = method.GetParameters()[index].Name;


    return retVal;
}

Вышеприведенный образец должен делать то, что вам нужно.

Ответ 2

Попробуйте что-то вроде этого:

foreach(ParameterInfo pParameter in pMethod.GetParameters())
{
    //Position of parameter in method
    pParameter.Position;

    //Name of parameter type
    pParameter.ParameterType.Name;

    //Name of parameter
    pParameter.Name;
}

Ответ 3

без какой-либо проверки ошибок:

public static string GetParameterName ( Delegate method , int index )
{
    return method.Method.GetParameters ( ) [ index ].Name ;
}

Вы можете использовать 'Func <TResult> ' и производные, чтобы сделать эту работу для большинства ситуаций.