检索调用方法&来自委托的元数据

本文关键字:元数据 调用 方法 检索 | 更新日期: 2023-09-27 18:12:51

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

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的十个调用来自给定线程中对MethodOne的调用…这可能吗?

检索调用方法&来自委托的元数据

这太可怕了:

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

(这也不是免费的;任何这样的滥用都有性能代价)

不容易,但如果检查当前堆栈跟踪是可能的:

using System.Diagnostics;
// ...
StackTrace t = new StackTrace();

如果你需要你的代码根据调用者的不同表现不同,你应该在你的方法中有一个额外的参数,调用者可以用它来标识他们自己。

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