while和do-while迭代中的语句范围变量?

时间:2019-05-01 12:04:08

标签: c# scope iteration

我想知道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语句之外。因此,范围是语句本身。

但是,似乎无法通过whiledo-while迭代进行这种范围界定。该控制变量不能在语句的控制部分中声明/初始化。如果在嵌入式语句中声明了它,则它在控制部分中是不可见的(代码无法编译),并且如果在整个语句之外进行了声明,则在该语句之外是可见的,无论如何都无法与{{1 }}迭代构造。

以上内容确实合乎逻辑,但是我想知道:

  • ,如果有一种方法可以在forwhile中声明一个变量,该变量在嵌入式语句的控制部分中可见,但在该语句外部不可见,例如{ do-while语句中的{1}}。

  • 如果不是,是否有明显的原因是设计师不允许这样做?

0 个答案:

没有答案