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~