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