public static void TestGetParentMethodInfo()
{
GetMethodInfo(0);
}
public static void GetMethodInfo(int index)
{
index++;//由于我是封装了方法,相当于上端想要获取本身,其实对于这里而言,上端的本身就是这里的上端,所以需要+1,以此类推
var stack = new StackTrace(true);
//0是本身,1是调用方,2是调用方的调用方...以此类推
var method = stack.GetFrame(index).GetMethod();//想要获取关于方法的信息,可以自己断点调试这里
var dataList = new Dictionary<string, string>();
var module = method.Module;
dataList.Add("模块", module.Name);
var deClearType = method.DeclaringType;
dataList.Add("命名空间", deClearType.Namespace);
dataList.Add("类名", deClearType.Name);
dataList.Add("完整类名", deClearType.FullName);
dataList.Add("方法名", method.Name);
var stackFrames = stack.GetFrames();
dataList.Add("调用链", string.Join(" -> ", stackFrames.Select((r, i) =>
{
if (i == 0) return null;
var m = r.GetMethod();
return $"{m.DeclaringType.FullName}.{m.Name}";
}).Where(r => !string.IsNullOrWhiteSpace(r)).Reverse()));
dataList.ForeachLingbug(r =>
{
Console.WriteLine($"{r.Key}:{r.Value}");
});
}
测试结果:
Ending~