如何在运行时获取方法的名称?

时间:2015-08-30 16:41:19

标签: c# methods reflection

我使用的事件系统为回调方法名称取一个字符串。我想避免硬编码字符串。有什么办法可以在运行时获取给定类的方法名吗?

类似于:

typeof(MyClass).Name;

但是方法会很完美。

编辑:

我一直在谷歌搜索问题,所有结果似乎都是想要获取当前执行方法名称的人。这不是我想要的 - 而是我想在同一个班级中获得其他方法的名称。

3 个答案:

答案 0 :(得分:2)

听起来你正在谈论在C#6.0中添加的nameof运算符。

MSDN Documentation

摘录:

  

用于获取变量,类型或成员的简单(非限定)字符串名称。在报告代码中的错误,连接模型 - 视图 - 控制器(MVC)链接,触发属性更改事件等时,通常需要捕获方法的字符串名称。使用nameof有助于在重命名定义时保持代码有效。之前必须使用字符串文字来引用定义,这在重命名代码元素时很脆弱,因为工具不知道检查这些字符串文字。

     

表达式的名称具有以下形式:

if (x == null) throw new ArgumentNullException(nameof(x));
WriteLine(nameof(person.Address.ZipCode)); // prints "ZipCode”

答案 1 :(得分:1)

您正在寻找

System.Reflection.MethodBase.GetCurrentMethod().Name;

参考MethodBase.GetCurrentMethod Method

  

返回表示当前正在执行的MethodBase对象   方法

修改

var str = typeof(MyClass);
MethodInfo[] info = str.GetMethods(BindingFlags.Public | BindingFlags.Instance);

答案 2 :(得分:0)

对于相同的方法:

MethodBase.GetCurrentMethod().Name;

对于另一个类中的方法:

var type = typeof(MyClass);
MethodInfo[] methodInfos = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);

然后,您可以使用methodInfos[0].Name来获取方法的名称。

如果要调用的方法属于同一个类,则可以按如下方式执行:

如果是没有返回类型的方法/ void

 Action action = () => { MethodToBePassed(); };

  public static void MethodToBePassed()
  {
  }

   public static void Test(string a, Action action)
   {
      action();
   }

如下所示:

 Test("a", action);

如果方法有返回参数

 Func<string, int> action = (str) => { return MethodToBePassed(str); };

 public int MethodToBePassed(string sample)
 {
    return 1;
 }

 public static void Test(string a, Func<string, int> action)
 {
    int value = action("a");
 }