C#如何在当前方法中获取方法的调用栈?
调用栈如下, 如何在Class2ConsoleTest中获取方法名Class1CosoleTest及其类名和Main及其类名?利用StackTrace 即可。
![](https://img.haomeiwen.com/i2789632/1506818fe982d4d8.png)
Result
![](https://img.haomeiwen.com/i2789632/ff5df2c9661129b2.png)
Code 如下:
Program
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetWhoInvokeThisMethod
{
class Program
{
static void Main(string[] args)
{
Class1.Class1ConsoleTest();
}
}
}
Class1
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetWhoInvokeThisMethod
{
public class Class1
{
public static void Class1ConsoleTest()
{
Class2 c = new Class2();
c.Class2ConsoleTest();
}
}
}
Class2
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace GetWhoInvokeThisMethod
{
public class Class2
{
public void Class2ConsoleTest()
{
StackTrace st = new StackTrace();
var pName = st.GetFrame(1).GetMethod().Name;
var ppName = st.GetFrame(2).GetMethod().Name;
Console.WriteLine($"current method: {st.GetFrame(0).GetMethod().Name}");
Console.WriteLine($"current class: {st.GetFrame(0).GetMethod().ReflectedType.Name}\n");
Console.WriteLine($"parent method: {st.GetFrame(1).GetMethod().Name}");
Console.WriteLine($"parent class: {st.GetFrame(1).GetMethod().ReflectedType.Name} \n");
Console.WriteLine($"parent's parent method: {st.GetFrame(2).GetMethod().Name}");
Console.WriteLine($"parent's parent class: {st.GetFrame(2).GetMethod().ReflectedType.Name}");
Console.ReadLine();
}
}
}
![](https://img.haomeiwen.com/i2789632/895f6f1e377691a2.png)
![](https://img.haomeiwen.com/i2789632/efa638dfb9ba902e.png)
网友评论