检索呼叫方法&来自Delegate的元数据

时间:2011-11-01 10:07:17

标签: c# .net reflection

是否可以从给定方法内部检索有关调用它的方法的任何信息?

public void MethodOne()
{
   for (int nCount = 0; nCount < 10; nCount++) MethodTwo();
}
public void MethodTwo()
{
   // Can I retrieve here information about the call to MethodOne which originated this call?
}

例如,在这种情况下,我希望能够在运行时知道给定MethodTwo的一组10个调用来自给定线程中对MethodOne的调用...这可能吗?

2 个答案:

答案 0 :(得分:2)

这太可怕了:

string caller0 = new StackFrame(1).GetMethod().Name; // MethodOne
string caller1 = new StackFrame(2).GetMethod().Name; // whatever called MethodOne

(这也不是免费的;任何此类滥用都有性能价格)

答案 1 :(得分:1)

虽然可以检查当前的堆栈跟踪,但不容易:

using System.Diagnostics;

// ...

StackTrace t = new StackTrace();

如果您的代码需要根据调用者的不同而有所不同,那么您的方法应该有一个额外的参数,调用者可以使用该参数来识别自己。

如果您使用此信息来调试您的应用程序,那么您可能希望使用可以告诉您此类信息的分析器,而无需您修改代码。