我可以通过提供方法本身来获取方法的名称吗?

Ody*_*dys 4 c# reflection .net-3.5

有没有办法通过提供方法本身来获取方法的名称(作为字符串)?

class Person
{
    bool Eat(Food food){...}
}
Run Code Online (Sandbox Code Playgroud)

我想以某种方式得到字符串"吃".就这样!这可以来自实例,也可以来自使用反射的类声明.

我的尝试:

public delegate bool EatDelegate(Food f);

EatDelegate eatDel = new EatDelegate(_person1.Eat);
string methodName = eatDel.GetInvocationList()[0].Method.Name;
Run Code Online (Sandbox Code Playgroud)

这需要知道方法的委托,整个事情是不可读的

我想要methodName以便动态调用它.

笔记:

  • 我想要调用的每个方法都有一个委托声明
  • 我想避免指定方法的名称,以避免反射后的错误等
  • 在我想要获取其名称的那一刻,该方法不会被调用.(不能用MethodBase.GetCurrentMethod())
  • 我必须使用.Net 3.5

L.B*_*L.B 5

public string GetName(Expression<Action> exp)
{
    var mce = exp.Body as MethodCallExpression;
    return mce.Method.Name;
}
Run Code Online (Sandbox Code Playgroud)

-

一个方法

public int  MyMethod(int i)
{
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

和用法

 var s= GetName(()=>this.MyMethod(0));
Run Code Online (Sandbox Code Playgroud)