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

本文关键字:方法 获取 运行时 | 更新日期: 2023-09-27 18:10:29

我正在使用一个事件系统,它将一个字符串作为回调方法名称。我想避免硬编码字符串。是否有任何方法可以在运行时获得给定类的方法名称?

类似:

typeof(MyClass).Name;

但是对于方法来说是完美的。

编辑:

我一直在谷歌搜索这个问题,所有的结果似乎都是人们希望得到当前执行方法的名称。这不是我要找的-相反,我想在同一个类中获得其他方法的名称。

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

听起来你在说c# 6.0中添加的nameof运算符。

MSDN文档

摘录:

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

一个nameof表达式有这样的形式:

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

您要找的是

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

MethodBase。GetCurrentMethod方法

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

编辑:

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

对于相同的方法:

MethodBase.GetCurrentMethod().Name;

For方法在另一个类中:

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");
 }