Если у меня есть такой метод, как:
public void MyMethod(int arg1, string arg2)
Как мне получить настоящие имена аргументов? Кажется, я не могу найти в MethodInfo ничего, что действительно дало бы мне имя параметра.
Я хотел бы написать метод, который выглядит так:
public static string GetParamName(MethodInfo method, int index)
Итак, если бы я вызвал этот метод с помощью:
string name = GetParamName(MyMethod, 0)
он вернет "arg1". Это возможно?





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;
}
Приведенный выше образец должен делать то, что вам нужно.
Попробуйте что-то вроде этого:
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;
}
без какой-либо проверки ошибок:
public static string GetParameterName ( Delegate method , int index )
{
return method.Method.GetParameters ( ) [ index ].Name ;
}
Вы можете использовать Func <TResult> и производные, чтобы сделать эту работу в большинстве ситуаций.
@TomAnderson - слепое копирование кода из Интернета тоже вызывает проблемы!
nameof(arg1) вернет имя переменной arg1
https://msdn.microsoft.com/en-us/library/dn986596.aspx
Я почти полностью уверен, что ОП имел ввиду от вне метода. Все остальные комментарии, оставленные на восемь лет раньше вашего, также, кажется, подтверждают это.
Есть идеи, как заставить эту работу работать с функцией, аргументы которой представлены в виде массива
params?