4

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

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

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

我的尝试:

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
4

2 回答 2

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));
于 2012-10-05T16:47:45.940 回答
0
var methods = typeof(Person).GetMethods();
foreach (var method in methods)
{
    if (method.Name.Equals("Eat"))
    {
         // do something here...
    }
}
于 2012-10-05T16:43:16.497 回答