【问题标题】:get the name of the method in C#在 C# 中获取方法的名称
【发布时间】:2013-08-04 18:13:31
【问题描述】:

有什么方法可以获取我们当前在其中的方法名吗?

private void myMethod()
{
    string methodName = __CurrentMethodName__;
    MessageBox(methodName);
}

像 this.ToString() 这样返回类名有没有可能通过监视或跟踪应用程序来获取方法的名称?

【问题讨论】:

    标签: c# .net monitoring trace


    【解决方案1】:

    这会让你得到名字 -

    string methodName = System.Reflection.MethodInfo.GetCurrentMethod().Name;
    

    string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
    

    【讨论】:

      【解决方案2】:

      .NET 4.5 添加了Caller Information 属性,因此您可以使用CallerMemberNameAttribute

      using System.Runtime.CompilerServices;
      
      void myMethod()
      {
          ShowMethodName();
      }
      
      void ShowMethodName([CallerMemberName]string methodName = "")
      {
          MessageBox(methodName);
      }
      

      这样做的好处是在编译时烘焙方法名称,而不是运行时。不幸的是,没有办法阻止有人拨打ShowMethodName("Not a real Method"),但这可能没有必要。

      【讨论】:

      • 方法名参数需要默认
      • 嗯...我认为你没有编译这个。因此,在我们修复时,它也需要输入。 :)
      【解决方案3】:

      简单

      public string MyMethod()
      {
          StackTrace st = new StackTrace ();
          StackFrame sf = st.GetFrame (1);
      
          string methodName = sf.GetMethod().Name;
      }
      

      【讨论】:

        【解决方案4】:

        您可以像这样获取有关方法的信息

        var method = MethodInfo.GetCurrentMethod();
        var name = method.Name;  //get method name
        var parameters = method.GetParameters();  //get method parameters
        

        【讨论】:

          猜你喜欢
          • 2010-09-19
          • 2012-03-27
          • 1970-01-01
          • 2011-03-16
          • 2016-11-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-07-08
          相关资源
          最近更新 更多