C# 为什么在类中声明相同名称的实例级静态字段时方法作用域参数值会出错

C# 为什么在类中声明相同名称的实例级静态字段时方法作用域参数值会出错,c#,.net,clr,C#,.net,Clr,现在的问题是,while循环在无限循环中运行,因为当计数器方法级别变量的值达到值=3时,线程控制将从方法中出来,并在方法级别计数器变量设置为2的情况下再次恢复循环执行-我不确定为什么此计数器设置为2 只要我将方法参数名称计数器更改为非静态实例字段名,就会得到预期结果,控制台将打印0、1、2 你能给我解释一下吗?.NET CLR中是否存在从TLS(线程本地存储)读取值的错误 我得到了这里的问题所在,对于方法SelfCallingMethod的初始调用堆栈,而循环条件总是计算2==2,这导致了无限循

现在的问题是,while循环在无限循环中运行,因为当计数器方法级别变量的值达到值=3时,线程控制将从方法中出来,并在方法级别计数器变量设置为2的情况下再次恢复循环执行-我不确定为什么此计数器设置为2

只要我将方法参数名称计数器更改为非静态实例字段名,就会得到预期结果,控制台将打印0、1、2

你能给我解释一下吗?.NET CLR中是否存在从TLS(线程本地存储)读取值的错误


我得到了这里的问题所在,对于方法SelfCallingMethod的初始调用堆栈,而循环条件总是计算2==2,这导致了无限循环。

您的代码从不使用静态字段。看看这个循环:

static void Main(string[] args)
    {           
        SelfCallingTest sct = new SelfCallingTest();
        sct.SelfCallingMethod(0);

        Console.Read();
    }

while(计数器参数计数器的作用域最接近-事实上,静态变量从未从您的代码中引用。您正在测试的计数器没有任何增量。

也许您的意思是
如果
,而不是递归调用时的
我知道这里的问题是什么,对于met的启动调用堆栈hod SelfCallingMethod,而循环条件总是计算2==2,这导致了无限循环。对于方法SelfCallingMethod的初始化调用堆栈,我得到了问题所在,而循环条件总是计算2==2,这导致了无限循环。
static void Main(string[] args)
    {           
        SelfCallingTest sct = new SelfCallingTest();
        sct.SelfCallingMethod(0);

        Console.Read();
    }
while (counter <= 2)
{
    SelfCallingMethod(counter);
}