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

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

public void MyMethod(int arg1, string arg2)

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

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

public static string GetParamName(MethodInfo method, int index)

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

string name = GetParamName(MyMethod, 0)

он вернет "arg1". Это возможно?


person Community    schedule 17.10.2008    source источник


Ответы (4)


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;
}

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

person Tom Anderson    schedule 17.10.2008
comment
Есть идеи, как заставить эту работу работать с функцией, где аргументы предоставляются в виде массива params? - person Ben Philipp; 14.12.2019

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

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;
}
person Jeremy    schedule 17.10.2008

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

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

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

person kͩeͣmͮpͥ ͩ    schedule 17.10.2008
comment
@TomAnderson - слепое копирование кода из интернета тоже вызывает проблемы! - person kͩeͣmͮpͥ ͩ; 29.03.2016

nameof(arg1) вернет имя переменной arg1

https://msdn.microsoft.com/en-us/library/dn986596.aspx

person Community    schedule 16.11.2016
comment
Я почти полностью уверен, что OP имел в виду извне метода. Все остальные комментарии, оставленные на восемь лет раньше вашего, также, кажется, подтверждают это. - person Jay Allen; 13.10.2019