2012-10-05 56 views
4

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

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; 

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

我想要的方法名,以动态地调用它。

注:

  • 没有为我想要调用
  • 每一个方法的委托声明我想避免为了避免反射等
  • 方法ISN”后误差指定方法的名称当我想要得到它的名字的时候。 (不能使用MethodBase.GetCurrentMethod()
  • 我必须使用的.Net 3.5
+0

大概可以用表达式来解决某些问题...... – Servy

回答

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

这是我想要避免的。必须指定“吃”字符串值。 – Odys

+0

那么你的做法是正确的,它有什么不对? –

+0

来自问题:_“我想以某种方式得到字符串”Eat“,就是这样!”_ **和** _“我想避免指定方法的名称”_ –

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)); 
+0

这会运行一次该方法吗? – Odys

+0

@odyodyodys不, –

相关问题