Możemy również użyć lambda do znalezienia dzwoniącego.
Załóżmy, że masz zdefiniowaną przez siebie metodę:
public void MethodA()
{
/*
* Method code here
*/
}
i chcesz znaleźć dzwoniącego.
1 . Zmień podpis metody, abyśmy mieli parametr typu Action (Func również będzie działał):
public void MethodA(Action helperAction)
{
/*
* Method code here
*/
}
2 . Nazwy Lambda nie są generowane losowo. Reguła wydaje się wyglądać następująco:> <nazwa_programu_wywołania> __X, gdzie nazwa_wywołania jest zastępowana przez poprzednią funkcję, a X to indeks.
private MethodInfo GetCallingMethodInfo(string funcName)
{
return GetType().GetMethod(
funcName.Substring(1,
funcName.IndexOf(">", 1, StringComparison.Ordinal) - 1)
);
}
3 . Kiedy wywołujemy MethodA, parametr Action / Func musi zostać wygenerowany przez metodę wywołującą. Przykład:
MethodA(() => {});
4 . Wewnątrz MethodA możemy teraz wywołać funkcję pomocniczą zdefiniowaną powyżej i znaleźć MethodInfo metody wywołującej.
Przykład:
MethodInfo callingMethodInfo = GetCallingMethodInfo(serverCall.Method.Name);