{
var k = 0;
{
var k = 5;
}
}
{
{
var k = 5;
}
var k = 0;
}
лучше посмотреть на вот этот пример. c точки зрения компилятора - это равнозначные ситуации
т.к. во внутреней зоне видимости возникает ситуация что
объявленно 2 переменных с одинаковым именем (я сейчас говорю с точки зрения парсинга исходного кода при построении ast). И неважно что переменная в верхней зоне видимости еще даже не
инициализирована. Потенциально - да, это могло бы работать иначе, но (похоже что) было решено что преимущества от данного усложнения (разрешить во внутреннем контексте объявлять уже существующие переменные при условии что они еще не были инициализированы во всех внешних контекстах) себя не оправдывают. Кроме того, уж если очень нужно сделать что-то такое то (что достаточно редкая ситуация сама по себе) - это можно разрулить ручками, т.е.
for (int a = 0; a < 3; a++)
{
Console.WriteLine(a);
}
{
int a = 3;
}