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

时间:2012-10-05 16:35:47

标签: c# reflection .net-3.5

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

class Person
{
    bool Eat(Food food){...}
}

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

我的尝试:

public delegate bool EatDelegate(Food f);

EatDelegate eatDel = new EatDelegate(_person1.Eat);
string methodName = eatDel.GetInvocationList()[0].Method.Name;

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

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

注意:

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

2 个答案:

答案 0 :(得分:5)

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

-

方法

public int  MyMethod(int i)
{
    return 0;
}

和用法

 var s= GetName(()=>this.MyMethod(0));

答案 1 :(得分:0)

var methods = typeof(Person).GetMethods();
foreach (var method in methods)
{
    if (method.Name.Equals("Eat"))
    {
         // do something here...
    }
}