Reflection 回答";哪种方法叫我;在.NET的运行时?或者代码是否可读调用堆栈数据?

Reflection 回答";哪种方法叫我;在.NET的运行时?或者代码是否可读调用堆栈数据?,reflection,runtime,methods,call,callstack,Reflection,Runtime,Methods,Call,Callstack,假设有methodA()、methodB()和methodC() 在运行时调用methodC() 可以知道methodC()是从哪个方法调用的吗 我在想是否可以在运行时读取CallStack进行一些检查?如果是的话,我认为这没什么大不了的 有什么想法吗 谢谢 使用StackTrace和StackFrame类。例如: StackTrace StackTrace=new StackTrace(); StackFrame[]stackFrames=stackTrace.GetFrames(); for

假设有methodA()、methodB()和methodC()

在运行时调用methodC()

可以知道methodC()是从哪个方法调用的吗

我在想是否可以在运行时读取CallStack进行一些检查?如果是的话,我认为这没什么大不了的

有什么想法吗


谢谢

使用
StackTrace
StackFrame
类。例如:

StackTrace StackTrace=new StackTrace();
StackFrame[]stackFrames=stackTrace.GetFrames();
foreach(StackFrame中的StackFrame StackFrame)
{
string method=stackFrame.GetMethod().Name;
//用方法做一些事情
}

是的,可以在运行时使用读取调用堆栈。

比“是否可能”更好的问题是“是否需要”。我从来没有看到过这样做的正当理由——只有无效的理由。请说出您想要完成的任务。John,这在调试时非常有用。当你有大量的代码时,一步一步的方法并不总是可行的。实际上,这是好奇心。我使用了一个你安装在VS上的训练集,试图通过编写代码来完成他们给你的任务。我想知道他们是如何分析我的代码的。他们如何知道一个方法是从什么方法等调用的。也许他们是以完全不同的方式调用的,但这只是在我的脑海中提出了这个问题。请参阅这个问题的副本以了解更多细节,特别是John Leidegren的回答。请注意,这是一个昂贵的函数,您可能只想在例外情况下执行(al)情况。很难想象在异常派生类中还没有StackTrace的部分时,您想要做什么。如果您正在考虑日志记录,那么您必须问问自己,这项开销是否值得。