是否可以从给定方法内部检索有关调用它的方法的任何信息?
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
的调用...这可能吗?
答案 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();
如果您的代码需要根据调用者的不同而有所不同,那么您的方法应该有一个额外的参数,调用者可以使用该参数来识别自己。
如果您使用此信息来调试您的应用程序,那么您可能希望使用可以告诉您此类信息的分析器,而无需您修改代码。