none
如何在运行时的方法中获取当前调用的方法的名称,方法所在类名,方法的返回值类型,所在命名空间, RRS feed

  • 问题

  • 例如以下的类

    namespace Dome.Test
    {
        class TestClass
        {
            public void testMothed(string textStr) {
    
            }
        }
    }

    当创建一个TestClass类的实例,并且调用了testMothed时,如何在testMothed方体内获取下列信息?

    • 当前正在调用的方法名
    • 方法的参数列表和参数类型
    • 返回值类型
    • 方法所在类名
    • 所在命名空间

    2018年3月18日 10:22

答案

  • class Program
    {
        static void Main(string[] args)
        {
            int a = Add(18);
            Console.ReadLine();
        }

        public static int Add(int x, int y)
        {
            var method =(MethodInfo)MethodBase.GetCurrentMethod();
            Console.WriteLine(method.Name);
            Console.WriteLine(method.Module);
            Console.WriteLine(method.DeclaringType);
            Console.WriteLine(method.DeclaringType.Namespace);
            Console.WriteLine(method.ReturnType);           
            foreach (var p in method.GetParameters ())
            {
                Console.WriteLine($"{p.GetType()} {p.Name}");
            }

            return x + y;
        }
    }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2018年3月19日 4:13

全部回复

  • 试下

    StackTrace stackTrace = new StackTrace();           // get call stack
      StackFrame[] stackFrames = stackTrace.GetFrames();  // get method calls (frames)
    
      // write call stack method names
      foreach (StackFrame stackFrame in stackFrames)
      {
        Console.WriteLine(stackFrame.GetMethod().Name);   // write method name
      }



    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    2018年3月19日 1:09
  • 试下

    StackTrace stackTrace = new StackTrace();           // get call stack
      StackFrame[] stackFrames = stackTrace.GetFrames();  // get method calls (frames)
    
      // write call stack method names
      foreach (StackFrame stackFrame in stackFrames)
      {
        Console.WriteLine(stackFrame.GetMethod().Name);   // write method name
      }



    专注于.NET ERP/CRM开发框架,C/S架构,SQL Server + ORM(LLBL Gen Pro) + Infragistics WinForms

    这个方式我试用了一下,但目前找不到获取当前调用方法的所在类和命名空间
    2018年3月19日 3:16
  • class Program
    {
        static void Main(string[] args)
        {
            int a = Add(18);
            Console.ReadLine();
        }

        public static int Add(int x, int y)
        {
            var method =(MethodInfo)MethodBase.GetCurrentMethod();
            Console.WriteLine(method.Name);
            Console.WriteLine(method.Module);
            Console.WriteLine(method.DeclaringType);
            Console.WriteLine(method.DeclaringType.Namespace);
            Console.WriteLine(method.ReturnType);           
            foreach (var p in method.GetParameters ())
            {
                Console.WriteLine($"{p.GetType()} {p.Name}");
            }

            return x + y;
        }
    }


    在現實生活中,你和誰在一起的確很重要,甚至能改變你的成長軌跡,決定你的人生成敗。 和什麼樣的人在一起,就會有什麼樣的人生。 和勤奮的人在一起,你不會懶惰; 和積極的人在一起,你不會消沈; 與智者同行,你會不同凡響; 與高人為伍,你能登上巔峰。


    2018年3月19日 4:13