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;

これには、メソッドのデリゲートを知る必要があり、全体が読み取れません

動的に呼び出すために 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 に答える