我想知道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
迭代进行这种范围界定。该控制变量不能在语句的控制部分中声明/初始化。如果在嵌入式语句中声明了它,则它在控制部分中是不可见的(代码无法编译),并且如果在整个语句之外进行了声明,则在该语句之外是可见的,无论如何都无法与{{1 }}迭代构造。
以上内容确实合乎逻辑,但是我想知道:
,如果有一种方法可以在for
和while
中声明一个变量,该变量在嵌入式语句的控制部分中可见,但在该语句外部不可见,例如{ do-while
语句中的{1}}。
如果不是,是否有明显的原因是设计师不允许这样做?