Я думаю, что вы все путаете C ++ и C #.
В C ++ раньше считалось, что область действия переменной, объявленной в выражении for, является внешней по отношению к последующему блоку. Некоторое время назад это было изменено, так что область действия переменной, объявленной в выражении for, была внутренней по отношению к блоку, который следовал за ней. C # следует этому более позднему подходу. Но ни один из них не имеет к этому никакого отношения.
Здесь происходит то, что C # не позволяет одной области видимости скрывать переменную с тем же именем во внешней области.
Итак, в C ++ это было незаконно. Теперь это законно.
for (int i; ; )
{
}
for (int i; ; )
{
}
И то же самое разрешено в C #. Существует три области действия, внешняя, в которой «i» не определена, и две дочерние области, каждая из которых объявляет свое собственное «i».
Но то, что вы делаете, это:
int i;
for (int i; ; )
{
}
Здесь есть две области видимости. Внешний, который объявляет «я», и внутренний, который также объявляет «я». Это допустимо в C ++ - внешнее 'i' скрыто - но это недопустимо в C #, независимо от того, является ли внутренняя область действия циклом for, циклом while или чем-то еще.
Попробуйте это:
int i;
while (true)
{
int i;
}
Это та же проблема. C # не допускает использование переменных с одинаковыми именами во вложенных областях.