4

現在使用しているメソッドの名前を取得する方法はありますか?

private void myMethod()
{
    string methodName = __CurrentMethodName__;
    MessageBox(methodName);
}

クラス名を返す this.ToString() のように、アプリの監視やトレースなどでメソッドの名前を取得する方法はありますか?

4

4 に答える 4

12

これはあなたの名前を取得します -

string methodName = System.Reflection.MethodInfo.GetCurrentMethod().Name;

また

string methodName = System.Reflection.MethodBase.GetCurrentMethod().Name;
于 2013-08-04T18:15:33.543 に答える
6

.NET 4.5 では発信者情報属性が追加されるため、以下を使用できますCallerMemberNameAttribute

using System.Runtime.CompilerServices;

void myMethod()
{
    ShowMethodName();
}

void ShowMethodName([CallerMemberName]string methodName = "")
{
    MessageBox(methodName);
}

これには、実行時ではなくコンパイル時にメソッド名を焼き付けるという利点があります。残念ながら、誰かが を呼び出すのを防ぐ方法ShowMethodName("Not a real Method")はありませんが、それは必要ないかもしれません。

于 2013-08-04T18:17:34.653 に答える
4

単に

public string MyMethod()
{
    StackTrace st = new StackTrace ();
    StackFrame sf = st.GetFrame (1);

    string methodName = sf.GetMethod().Name;
}
于 2013-08-04T18:16:53.907 に答える