变量CFR的范围.Pluralsight C#测试

Fre*_*rcq 4 c# scope

我正准备参加关于c#70-483的微软考试,"还有很长的路要走", 并遵循复数视频的C#路径.在完成测试并检查我的错误答案后,我来到了这个.

2.考虑以下代码:

static void ListTowns(string[] countries)
 {
    foreach (string country in countries)
    {
        int townCount = GetTownCount(country);
        int i = 0;
        for (i = 0; i < townCount; i++)
        {
            Console.WriteLine(GetTownName(country, i));
        }
    } 
}
Run Code Online (Sandbox Code Playgroud)

变量何时超出范围?回答:

  1. 退出ListTowns()方法.

  2. 退出时 foreach loop

  3. 我永远不会超出范围,因为方法是static.

  4. 退出时 for loop

正确答案是4,但我的答案是2.因为在for循环之后你仍然可以使用i.或者我对"超出范围"的定义不正确?

Jon*_*eet 8

问题是IMO含糊不清且措辞严厉.有没有这样的概念,在C#中的变量"走出去的范围" -但有一个变量的作用域和范围i变量是整个foreach循环体,包括空集的右括号之间的语句在for环路和闭幕括号foreach循环.C#5规范的相关部分是3.7:

在local-variable-declaration(第8.5.1节)中声明的局部变量的范围是声明发生的块.在这种情况下,块是foreach循环的块.

你可以写的事实

Console.WriteLine(i);
Run Code Online (Sandbox Code Playgroud)

for循环之后它仍然编译显示它仍然在范围内.循环的每次迭代都foreach使用不同的i变量,但foreach循环中的任何位置i都在范围内.(甚至在声明之前就是这样 - 你不能使用它,但它仍然在范围内.)

我已经给出了与你相同的答案,作为被问到的最佳近似值.我建议你给Pluralsight发电子邮件,要求他们改进这个问题.