首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >迭代范围太广

迭代范围太广
EN

Stack Overflow用户
提问于 2012-10-18 17:19:21
回答 2查看 179关注 0票数 1

可能重复: Why can’t a duplicate variable name be declared in a nested local scope?

我注意到下面的代码没有编译。快速修复方法是将外部变量thing召回到其他变量,但随后我开始思考并意识到,内部作用域应该在 foreach循环中结束。我肯定不能在它外面使用内部变量。

难道我不能在循环之外重用名称thing吗?为什么?

代码语言:javascript
复制
String aggregate = String.Empty;
foreach (Thing thing in things)
  aggregate += thing.Value;

Thing thing = new Thing();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-18 17:28:57

事实上,令人惊讶的是,变量的范围比您预期的要宽。试试看这段代码。

代码语言:javascript
复制
String aggregate = String.Empty;
foreach (Thing thing in things)
  aggregate += thing.Value;
foreach (Thing thing in things)
  aggregate += thing.Value;

它会编译得很好。但是,如果您像以前一样在外部声明thing,则声明范围是向外。有时候我也会很高兴的。:)

票数 0
EN

Stack Overflow用户

发布于 2012-10-18 17:21:04

难道我不能在循环之外重用名字吗?为什么?

问题是,最后一行中的变量范围向上扩展.它覆盖了整个街区。因此,问题实际上是,您不能为循环声明thing变量,因为它与另一个已经在作用域中的变量发生冲突。

来自C# 4规范的8.5.1节:

在局部变量声明中声明的局部变量的作用域是发生声明的块。引用局部变量在局部变量声明之前的文本位置上的局部变量是错误的。在局部变量范围内,声明同名的另一个局部变量或常量是编译时错误。

最后一句是你的代码违反的。

就用不同的名字。

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12960205

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档