Мы также можем использовать лямбду, чтобы найти абонента.
Предположим, у вас есть определенный вами метод:
public void MethodA()
{
/*
* Method code here
*/
}
и вы хотите найти его звонящего.
1 . Измените сигнатуру метода, чтобы у нас был параметр типа Action (Func также будет работать):
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);