web-dev-qa-db-ja.com

呼び出された関数から呼び出し関数名を取得する

可能性のある複製:
現在のメソッドを呼び出したメソッドを見つけるにはどうすればよいですか?

C#で呼び出された関数から呼び出し元の関数名を取得するにはどうすればよいですか?

36
Sauron
new StackFrame(1, true).GetMethod().Name

リリースビルドでは、コンパイラは呼び出されるメソッドをインライン化する場合があります。この場合、上記のコードは呼び出し元の呼び出し元を返すため、安全のためにメソッドを次のように修飾する必要があります。

[MethodImpl(MethodImplOptions.NoInlining)]
75
Ben M

これにより、現在のメソッドの名前が取得されます。

string currentMethod = System.Reflection.MethodBase.GetCurrentMethod().Name;

パフォーマンスが低下する可能性があるため、注意して使用してください。

To get callers:
StackTrace trace = new StackTrace();
int caller = 1;

StackFrame frame = trace.GetFrame(caller);

string callerName = frame.GetMethod().Name;

これは、スタックウォークを使用してメソッド名を取得します。呼び出し元の値は、コールスタックをどれだけ上に移動するかです。遠くに行かないように注意してください。

14
Joe Caffeine