代码之家  ›  专栏  ›  技术社区  ›  userSteve

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

c#
  •  -1
  • userSteve  · 技术社区  · 6 年前

    这是:

    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 回复  |  直到 6 年前
        1
  •  3
  •   Ousmane D.    6 年前

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

        2
  •  2
  •   eye_am_groot    6 年前

    当你写作时 int j=1 int j=2 ,你是 尝试 声明变量两次(只能声明一次)。

    但是,您可以覆盖 j :

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

    这就是 for 循环正在执行-的每个迭代 对于 循环,更新值。的新实例 J 不是在每次迭代期间创建的。

        3
  •  1
  •   Afonso    6 年前

    在第一个示例中,您定义了两个同名的变量,它们同时存在。

    在循环中,每个变量都是在循环上下文中创建的。每次迭代后,变量都会被销毁,这样您就可以创建一个同名的新变量(在下一次迭代中)。换句话说,在循环中,它们不同时存在。