可变cfr的范围。多视距C#试验
我正在准备关于c#70-483的微软考试,“还有很长的路要走” 沿着pluralsight上的C#路径。 在做了测试并复习了我的错误答案后,我得出了这个答案可变cfr的范围。多视距C#试验,c#,scope,C#,Scope,我正在准备关于c#70-483的微软考试,“还有很长的路要走” 沿着pluralsight上的C#路径。 在做了测试并复习了我的错误答案后,我得出了这个答案 2.考虑以下代码: static void ListTowns(string[] countries) { foreach (string country in countries) { int townCount = GetTownCount(country); int i = 0;
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));
}
}
}
静态无效列表城镇(字符串[]国家)
{
foreach(国家中的字符串国家)
{
int townCount=GetTownCount(国家);
int i=0;
对于(i=0;i
变量i何时超出范围? 答复:
ListTowns()
方法时foreach循环时
时
还是我对“超出范围”的定义不正确?您的答案2是正确的 我在VisualStudio中使用了以下代码
class Program
{
static void Main(string[] args)
{
string[] testdata = { "one", "two", "three", "four"};
ListCheckFunction(testdata);
Console.ReadLine();
}
static void ListCheckFunction(string[] countries)
{
foreach (string country in countries)
{
int townCount = countries.Count();
int i = 0;
for (i = 0; i < townCount; i++)
{
Console.WriteLine(country + " " +i);
}
Console.WriteLine(i + " i is still in scope");
}
}
}
在我看来,这个问题很模糊,措辞也很糟糕。在C#中没有变量“超出范围”这样的概念,但变量的范围是存在的,
i
变量的范围是整个foreach
循环体,包括for
循环的右大括号和foreach
循环的右大括号之间的空语句集。C#5规范的相关部分为3.7:
局部变量声明(§8.5.1)中声明的局部变量的范围是声明发生的块。在这种情况下,该块是foreach
循环的块
你会写的事实
Console.WriteLine(i);
在for
循环之后,它仍然编译,这表明它仍然在范围内。foreach
循环的每次迭代都使用不同的i
变量,但在foreach
循环中的任何地方,i
都在范围内。(即使在声明之前也是如此——您不能使用它,但它仍在范围内。)
我会给出和你一样的答案,作为对所问问题的最佳近似。我建议您发电子邮件给Pluralsight,要求他们改进问题。问题在哪里?循环I变量再次初始化后为零,变量I何时超出范围?抱歉:)回答2-在foreach之后,而不是foreach之后。看起来这是一个旨在让你明白而不是测试知识的问题。退出for循环后,
foreach
循环将(可能)再次迭代,创建一个新的i
变量。因此从技术上讲,在下一次foreach
迭代之前退出for
循环(因为它不再使用)时,它将超出范围,因为您还没有实际退出foreach
。
Console.WriteLine(i);