在什么情况下我在C#中运行?

Roy*_*mir 8 .net c# .net-4.0

我在想...

当我有这样的代码:

lock (obj)
{
    MyCode.MyAgent();
}
Run Code Online (Sandbox Code Playgroud)

可以MyAgent包含识别它在lock块下运行的代码吗?

关于什么:

for (int i=0;i<5;i++)
{
   MyCode.MyAgent();
}
Run Code Online (Sandbox Code Playgroud)

可以MyAgent包含识别它在loop块下运行的代码吗?

可以询问using块,unsafe代码等同样的问题...... - 你明白了......

这可能在C#中吗?

这只是一个理论问题,我不想做任何事情......只是知识.

Han*_*ant 8

这并非完全不可能,您可以使用StackTrace类来获取对调用方法的引用,并使用MethodInfo.GetMethodBody()来获取该方法的IL.

但是你永远不会得到这种可靠性,即时编译器的优化器会让你很难确定呼叫的确切位置.方法体内联将使方法完全消失.循环展开将使得无法了解循环索引.优化器使用cpu寄存器来存储局部变量和方法参数,从而无法获得可靠的变量值.

更不用说反编译IL的锡箔咀嚼工作.这些都不是将参数传递给方法的简单性和速度.