for循环如何允许重新声明变量?

时间:2018-07-20 16:27:15

标签: c#

此:

int j = 1;
int j = 2;
Console.WriteLine(j.ToString());

..产生编译错误:

  

已经在此范围内定义了名为“ j”的局部变量

这还可以:

for (int i = 0; i < 10; i++)
{
  int j = i;
  Console.WriteLine(j.ToString());
}

为什么?

循环如何在每次迭代中同时保留值,同时又能够在相同范围内重新声明具有相同名称的变量?

3 个答案:

答案 0 :(得分:3)

变量j仅在每次迭代中存在,即,在每次迭代中都声明,分配,使用并丢弃变量j,然后下一次迭代开始,过程重复进行,依此类推。因此,您不会得到与第一个示例代码段相同的编译错误。

答案 1 :(得分:2)

在编写int j=1int j=2时,您正在尝试声明两次变量(只能声明一次)。

但是,您可以覆盖j的值:

int j = 1; // now j has a value of 1
j = 2; // now j has a value of 2

这就是for循环的工作-for循环的每次迭代都会更新该值。每次迭代期间都不会创建j的新实例。

答案 2 :(得分:1)

在第一个示例中,您要定义两个具有相同名称的变量,并且它们同时存在。

在循环中,每个变量都在循环上下文中创建。每次迭代后,该变量均被销毁,从而允许您创建一个具有相同名称的新变量(在下一次迭代中)。换句话说,在循环中它们不是同时存在的。