Как получить MethodInfo функции из функции?

#c# #reflection

#c# #отражение

Вопрос:

Предположим, что существует функция GetEmployees :

 public static List<Employee> GetEmployees(Dictionary<int, Department> depts, bool isFullTime)
{
    // How do I get the MethodInfo of this "GetEmployees" function by writing code here?
}
 

Причина, по которой мне нужно получить MethodInfo внутри этой функции, заключается в том, что мне нужно знать

  • Имя функции («GetEmployees»)
  • Количество параметров («2»)
  • Имена параметров («depts» и «isFullTime»)
  • Типы параметров («System.Коллекции.Generic.Dictionary`2[int, Department]amp;» и «System.Логическое значение»)
  • Возвращаемый тип

Спасибо!

Комментарии:

1. Я откатил ваше редактирование на ваш вопрос, потому что редактирование полностью изменило его область действия, превратив в другой вопрос. Если вы хотите задать вопрос о том, как получить значения параметров, это новый вопрос.

2. Если вы хотите добавить ведение журнала ко всем своим методам, вы можете использовать что-то вроде PostSharp (или другого инструмента, который позволяет использовать аспектно-ориентированное программирование ) для ввода кода ведения журнала для вас. Смотрите Здесь пример с PostSharp .

Ответ №1:

Я ожидаю, что вы этого хотите:

 MethodInfo myMethod = MethodInfo.GetCurrentMethod();
 

И вы можете получить отраженные параметры следующим образом:

 ParameterInfo[] parameters = myMethod.GetParameters();
 

Комментарии:

1. Спасибо за ваш ответ. Я забыл спросить: как только у меня будет этот MethodInfo, как мне получить значения параметров?

2. Что вы подразумеваете под «значениями»? Вы имеете в виду значения, которые передаются GetEmployees при ее вызове?

3. Когда этот метод «GetEmployees» вызывается клиентом, клиент передает определенные значения в параметры. Вызов MethodInfo.GetCurrentMethod() получает только статический MethodInfo, в котором говорится: «Этот метод имеет логический параметр с именем «isFullTime», но как мой код получает «false», который был передан клиентом через этот параметр «isFullTime»?

4. Каждый раз, когда клиент вызывает этот метод, мой код должен выполняться. Он должен не только определять MethodInfo и ParameterInfo, но и значения параметра.

5. Я не уверен, что вы можете это сделать.