?我在VisualStudio2008中收到以下错误:错误1??无法在此范围内声明名为“i”的局部变量,因为它会给“i”赋予不同的含义,而“i”已在“子”范围中用于表示某些内容否则这是我的代码:for(inti=0;i<3;i++){stringstr="";}诠释我=0;//范围错误字符串str="";//noscopeerrori知道一旦循环终止,str就不再存在了,但是我也觉得i的作用域也仅限于for循环。所以i与在for循环外声明的变量具有相同的范围?编辑:为了清楚起见,我正在使用C#。我正在考虑删除“C”标签。然而,由于正确答案解释了两者之间的区别,我认为保留两个标签是有意义的。我在上面的代码注释中有一个错误:for(inti=0;i<3;i++){stringstr="";}诠释我=0;//范围错误字符串str="";//也是范围错误,//因为它等同于声明//stringstr="";在for循环之前(见下文)我认为你们都对C++和C#感到困惑。在C++中,用于在for表达式中声明的变量范围位于它后面的块之外。这在前一段时间已更改,因此在for表达式中声明的变量范围位于它后面的块内。C#遵循后一种方法。但这无关紧要。这里发生的事情是C#不允许一个作用域在外部作用域中隐藏同名变量。所以在C++中,这曾经是非法的。现在是合法的。for(inti;;){}for(inti;;){}同样的事情在C#中是合法的。有三个“i”在外部未定义的作用域,以及两个子作用域,每个子作用域都声明了自己的“i”。但是你正在做的是:inti;for(inti;;){}这里有两个作用域。外部声明一个“i”,内部也声明一个“i”。这在C++中是合法的——外部的“i”是隐藏的——但在C#中是非法的,无论内部作用域是for循环、while循环还是其他。试试这个:inti;while(true){inti;这是同样的问题。C#不允许在嵌套作用域中具有相同名称的变量。for循环后,增量器不存在。for(inti=0;i你不能在for循环之后重新声明i的原因是因为在IL中它实际上会在for循环之前声明它,因为声明发生在范围的顶部。是的。语法:new范围在由curl字符串定义的块内。功能:在某些情况下,您可能需要检查循环变量的最终值(例如,如果break)。只是一些背景信息:序列不会进入它。只有范围的想法-方法范围,然后是for循环的范围。所以“一旦循环终止”是不准确的。所以你发布的内容与此相同:inti=0;//scopeerrorstringstr="";//noscopeerrorfor(inti=0;i我发现这样想会让我的心智模型中的答案“更合适”以上就是C#学习教程的全部内容:Whatisthefor循环中counter变量的取值范围?分享,如果对你有用,需要了解更多C#学习教程,希望大家多多关注---本文收集自网络,不代表一个位置。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
