您的当前位置:首页正文

C#如何在当前方法中获取方法的调用栈

来源:华拓网

C#如何在当前方法中获取方法的调用栈?
调用栈如下, 如何在Class2ConsoleTest中获取方法名Class1CosoleTest及其类名和Main及其类名?利用StackTrace 即可。

Result

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();

        }
    }
}