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

C# 如何在运行时获取方法的名称?,c#,methods,reflection,C#,Methods,Reflection,我使用的是一个事件系统,它以字符串作为回调方法名。我希望避免硬编码字符串。有没有办法在运行时获取给定类的方法名 类似于: typeof(MyClass).Name; 但是,如果没有方法,那将是完美的 编辑: 我一直在用谷歌搜索这个问题,所有的结果似乎都是人们在寻找当前执行方法的名称。这不是我要找的-相反,我想得到同一类中其他方法的名称。您要找的 System.Reflection.MethodBase.GetCurrentMethod().Name; 提及 返回一个MethodBase对象,

我使用的是一个事件系统,它以字符串作为回调方法名。我希望避免硬编码字符串。有没有办法在运行时获取给定类的方法名

类似于:

typeof(MyClass).Name;
但是,如果没有方法,那将是完美的

编辑:

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

您要找的

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

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

编辑:

var str = typeof(MyClass);
MethodInfo[] info = str.GetMethods(BindingFlags.Public | BindingFlags.Instance);
对于相同的方法:

MethodBase.GetCurrentMethod().Name;
对于另一个类中的方法:

var type = typeof(MyClass);
MethodInfo[] methodInfos = type.GetMethods(BindingFlags.Public | BindingFlags.Instance);
然后,您可以使用,例如,
methodInfos[0].Name
获取方法的名称

如果要调用的方法在同一个类中,则可以按如下操作:

 Test("a", action);
如果是无返回类型的方法/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");
 }
Func action=(str)=>{returnmethodtobepassed(str);};
public int methodToPassed(字符串示例)
{
返回1;
}
公共静态无效测试(字符串a,Func操作)
{
整数值=作用(“a”);
}

听起来你在谈论C#6.0中添加的操作符的名称

摘录:

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

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


我没有使用当前的方法。我想使用不同的方法。您的解决方案是正确的,但我想知道使用当前方法的名称是否会干扰编译器优化。有时,编译器会抛弃一次性使用的方法。我不是说这是因为你的解决方案,但一般来说,如果你尝试使用当前方法的鬃毛,@Vesuvian,请澄清你的问题。“不同的方法”是什么意思?如果您已经可以键入方法名,如果您担心“其他方法”,请将其保留在字符串中。谢谢,这似乎不可靠。现在,我需要确保索引与方法位置匹配,而不是确保字符串与方法匹配。@Vesuvian不,不要依赖索引。GetMethods方法不按特定顺序返回方法,如字母顺序或声明顺序。你的代码不能依赖于方法返回的顺序,因为顺序不同。也许你在寻找?你能提供一个你拥有的示例代码吗?只是一个注释,它在编译时进行评估。谢谢Smallhacker。不幸的是,我使用的是2.0,但这个答案肯定是最相关的。