可能重复: Why can’t a duplicate variable name be declared in a nested local scope?
我注意到下面的代码没有编译。快速修复方法是将外部变量thing召回到其他变量,但随后我开始思考并意识到,内部作用域应该在 foreach循环中结束。我肯定不能在它外面使用内部变量。
难道我不能在循环之外重用名称thing吗?为什么?
String aggregate = String.Empty;
foreach (Thing thing in things)
aggregate += thing.Value;
Thing thing = new Thing();发布于 2012-10-18 17:28:57
事实上,令人惊讶的是,变量的范围比您预期的要宽。试试看这段代码。
String aggregate = String.Empty;
foreach (Thing thing in things)
aggregate += thing.Value;
foreach (Thing thing in things)
aggregate += thing.Value;它会编译得很好。但是,如果您像以前一样在外部声明thing,则声明范围是向外。有时候我也会很高兴的。:)
发布于 2012-10-18 17:21:04
难道我不能在循环之外重用名字吗?为什么?
问题是,最后一行中的变量范围向上扩展.它覆盖了整个街区。因此,问题实际上是,您不能为循环声明thing变量,因为它与另一个已经在作用域中的变量发生冲突。
来自C# 4规范的8.5.1节:
在局部变量声明中声明的局部变量的作用域是发生声明的块。引用局部变量在局部变量声明之前的文本位置上的局部变量是错误的。在局部变量范围内,声明同名的另一个局部变量或常量是编译时错误。
最后一句是你的代码违反的。
就用不同的名字。
https://stackoverflow.com/questions/12960205
复制相似问题