public class SelfCallingTest
{
private static int counter;
public void SelfCallingMethod(int counter)
{
Console.WriteLine("The input integer is: {0} ", counter);
counter++;
while (counter <= 2)
{
SelfCallingMethod(counter);
}
}
}
Run Code Online (Sandbox Code Playgroud)
上面的SelfCallingTest类有一个静态字段名"counter",SelfCallingMethod接受一个名为"counter"的整数参数(与静态实例成员计数器同名)从控制台测试应用程序Main()方法调用SelfCallingMethod
static void Main(string[] args)
{
SelfCallingTest sct = new SelfCallingTest();
sct.SelfCallingMethod(0);
Console.Read();
}
Run Code Online (Sandbox Code Playgroud)
现在的问题是,当循环进入无限循环时,因为当计数器方法级别变量的值达到值= 3时,线程控制将退出该方法并再次恢复,而循环执行时方法级别计数器变量设置为2 - 我不确定为什么这个计数器设置为2.
只要将方法参数名称计数器更改为静态实例字段名称以外的其他值,结果就会出现,并且控制台正在打印0,1,2
你能帮我解释一下吗?.NET CLR中是否存在从TLS读取值的错误(线程本地存储?)
我得到了问题所在,对于方法SelfCallingMethod的启动调用堆栈,而循环条件总是在评估2 == 2,这就是导致无限循环.