Имеется недопонимание как компилятор определяет можно ли объявить в данной области переменную или нет.
Первый листинг
static void Main(string[] args)
{
int some = 400;
if (some > 100)
{
int ansome = some - 100;
Console.WriteLine(ansome);
}
int ansome = 10000;
Console.WriteLine(ansome);
}
В данном случае компилятор выдаст ошибку, которая гласит, что нельзя объявлять в данной области переменную, так как это имя используется во включающей локальной области для определения локальной переменной или параметра.
Второй листинг
static void Main(string[] args)
{
int some = 400;
if (some > 100)
{
int ansome = some - 100;
Console.WriteLine(ansome);
}
{
int ansome = 10000;
Console.WriteLine(ansome);
}
}
В данном случае компилятор не выдаст ошибки. И вроде бы все логично, но я не понимаю какой смысл. В книги, в которой приводится данный пример говорится, что это правило было введено, чтобы программисты не допускали ошибку, которые работают в условиях, где требуется переменные объявлять в начале кода. Но если я буду переносить переменную в начало кода, то все остальные инициализации сразу станут ошибочными. И вот тут возникает вопрос, а чего я не понимаю? И какие нюансы еще скрыты и где о них можно прочесть.