我的课程Foo
的方法为SomeMethod()
。在SomeMethod()
中,我运行:Bar bar = new Bar(); bar.BBQ();
。在BBQ()
中,我调用私有方法Name(n)
,该方法会使用消息new StackTrace().GetFrame(n).GetMethod().Name
抛出异常。
我的目的是将1传递给Name(n),以便它返回值“BBQ”。但是,Name(0)返回“Name”,Name(1)返回“SomeMethod”。在抛出异常导致的堆栈跟踪中,它也会读取,好像Name是由SomeMethod直接调用的(没有提到BBQ)。
有解决方法吗?有谁知道可能导致此错误的原因是什么?是否有更好的方法可以从Name获得“BBQ”的价值?
[TestClass]
public class Foo
{
public Foo()
{
}
[TestMethod]
public void SomeMethod()
{
Bar bar = new Bar();
bar.BBQ();
}
}
public class Bar
{
public Bar()
{
}
public void BBQ()
{
Name( 1 );
}
private void Name( int n )
{
throw new Exception( new StackTrace().GetFrame(n).GetMethod().Name );
}
}
答案 0 :(得分:4)
我强烈怀疑问题是该方法是由JIT编译器内联的。您可以通过在调试器中运行调试版本来验证这一点,并查看是否能解决问题。
您可以相对轻松地get the immediate calling method,但我相信,在非调试环境中获得完全准确的堆栈跟踪是不可行的。毕竟,你不想禁用内联。