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);
}
}
}
Приведенный выше класс SelfCallingTest имеет статическое имя поля «counter», а SelfCallingMethod принимает целочисленный параметр с именем «counter» (то же имя, что и у статического элемента-счетчика экземпляра)
SelfCallingMethod вызывается из консольного тестового метода Main ()
static void Main(string[] args)
{
SelfCallingTest sct = new SelfCallingTest();
sct.SelfCallingMethod(0);
Console.Read();
}
Теперь проблема в том, что пока цикл находится в бесконечном цикле, потому что, когда значение переменной уровня метода счетчика достигает значения = 3, управление потоком выходит из метода и снова возобновляется при выполнении цикла с получением переменной счетчика уровня метода. установить на 2 - я не уверен, почему этот счетчик установлен на 2.
Как только я меняю счетчик имени параметра метода на другое, нежели статическое имя поля экземпляра, результаты ожидаются, и консоль печатает 0, 1, 2
Не могли бы вы дать мне объяснение? Есть ли ошибка в .NET CLR для чтения значения из TLS (локальное хранилище потока?)
Я понял, в чем здесь проблема, для инициирующего стека вызовов для метода SelfCallingMethod, в то время как условие цикла всегда оценивается как 2 == 2, и это вызывает бесконечный цикл.