Ми також можемо використовувати лямбда, щоб знайти абонента.
Припустимо, у вас визначений метод:
public void MethodA()
{
/*
* Method code here
*/
}
і ви хочете знайти його абонента.
1 . Змініть підпис методу, щоб у нас був параметр типу Action (функція також буде працювати):
public void MethodA(Action helperAction)
{
/*
* Method code here
*/
}
2 . Назви лямбда не генеруються випадковим чином. Здається, що правило:> <CallerMethodName> __X, де CallerMethodName замінено попередньою функцією, а X - індексом.
private MethodInfo GetCallingMethodInfo(string funcName)
{
return GetType().GetMethod(
funcName.Substring(1,
funcName.IndexOf(">", 1, StringComparison.Ordinal) - 1)
);
}
3 . Коли ми називаємо MethodA, параметр Action / Func повинен бути створений методом виклику. Приклад:
MethodA(() => {});
4 . Всередині MethodA тепер ми можемо викликати функцію помічника, визначену вище, і знайти MethodInfo методу виклику.
Приклад:
MethodInfo callingMethodInfo = GetCallingMethodInfo(serverCall.Method.Name);