首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么不能在嵌套的局部作用域中声明重复的变量名?

为什么不能在嵌套的局部作用域中声明重复的变量名?
EN

Stack Overflow用户
提问于 2011-05-28 02:44:46
回答 9查看 20.6K关注 0票数 51

基于最近的question,我不理解所提供的答案。看起来您应该能够做这样的事情,因为它们的作用域不重叠

代码语言:javascript
复制
static void Main()
{
  {
    int i;
  }
  int i;
}

此代码无法编译,并显示以下错误:

不能在此作用域中声明名为“I”的局部变量,因为它将赋予“”I“”不同的含义,“”I“”已用于“”

“”作用域中以表示其他子变量

EN

回答 9

Stack Overflow用户

回答已采纳

发布于 2011-05-28 03:02:16

我不认为到目前为止,任何答案都没有完全从规范中得到关键的线。

从8.5.1节中:

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

(重点是我的。)

换句话说,"later“变量的作用域包括声明之前的块的一部分-即它包括包含"earlier”变量的“内部”块。

您不能在早于声明的位置引用后面的变量--但它仍在作用域中。

票数 39
EN

Stack Overflow用户

发布于 2011-05-28 02:49:19

“局部变量或常量变量的作用域扩展到当前块的末尾。不能在当前块或任何嵌套块中声明另一个同名的局部变量。”简而言之,C# 3.0,http://www.amazon.com/3-0-Nutshell-Desktop-Reference-OReilly/dp/0596527578/

块的局部变量声明空间包括任何嵌套块。因此,在嵌套块中,不能声明与封闭块中的局部变量同名的局部变量。可变作用域,MSDN,http://msdn.microsoft.com/en-us/library/aa691107%28v=vs.71%29.aspx

另外,这与JavaScript和F#作用域规则完全相反。

票数 8
EN

Stack Overflow用户

发布于 2011-05-28 02:56:35

C# language spec:

块的局部变量声明空间包括任何嵌套块。因此,在嵌套块中,不能声明与封闭块中的局部变量同名的局部变量。

本质上,这是不允许的,因为在C#中,它们的作用域实际上是重叠的。

编辑:只是为了澄清,C#的作用域是在块级解析的,而不是逐行解析的。因此,虽然你不能在代码中引用声明之前的变量,但它的作用域一直延伸到块的开头也是正确的。

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

https://stackoverflow.com/questions/6156449

复制
相关文章

相似问题

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