Мне интересно узнать об итерационных конструкциях в C # (но я думаю, это также относится к C ++ и Java).
class Program {
static void Main (string[] args) {
// With 'for' i is in statement scope only
for (int i = 0; i <= 3;) { Console.WriteLine(i++); }
Console.WriteLine ("Control variable i is not accessible\n");
// No statement scope for 'while'
int j = 0;
while (j <= 3) { Console.WriteLine (j++); }
Console.WriteLine ($"Control variable after loop: {j}\n"); // Possible
// No statement scope for 'do-while'
int k = 0;
do { Console.WriteLine (k++); } while (k <= 3);
Console.WriteLine ($"Control variable after loop: {k}\n"); // Possible
}
}
В итерации for
переменная i
доступна ввстроенный оператор, в управляющей части оператора, но не вне оператора for
.Следовательно, это область действия самого утверждения.
Однако, кажется, невозможно иметь такую область видимости с while
и do-while
итерациями.Управляющая переменная не может быть объявлена / инициализирована в управляющей части операторов.Если он объявлен во встроенном операторе, он не виден в управляющей части (код не может быть скомпилирован), а если он объявлен вне всего оператора, он виден за пределами оператора, никоим образом не сопоставимый с управляющей переменной for
Конструкция итерации.
Вышесказанное действительно логично, однако я хотел бы знать:
, если есть способ объявить переменную в while
и do-while
который будет виден во встроенном операторе, в управляющей части, но не снаружи оператора, как int i
оператора for
.
, если нет, естьочевидная причина, по которой дизайнеры этого не допустили?