为了账号安全,请及时绑定邮箱和手机立即绑定

为什么不能在嵌套的本地范围中声明重复的变量名?

为什么不能在嵌套的本地范围中声明重复的变量名?

慕森王 2019-10-21 10:31:58
基于最近的问题,我不明白所提供的答案。似乎您应该能够执行这样的操作,因为它们的范围不会重叠static void Main(){  {    int i;  }  int i;}此代码无法编译,并出现以下错误:不能在此范围内声明名为“ i”的局部变量,因为它将赋予“ i”不同的含义,“ i”已在“子”范围中用于表示其他内容
查看完整描述

3 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

我不认为任何的答案至今已相当得到了规范的关键线。


从8.5.1节开始:


在local-variable-declaration中声明的局部变量的范围是声明所在的块。在文本位置引用局部变量的局部变量声明符之前的局部变量是错误的。在局部变量的范围内,声明另一个具有相同名称的局部变量或常量是编译时错误。


(强调我的。)


换句话说,“较晚”变量的范围包括声明之前的块的一部分,即它包括包含“较早”变量的“内部”块。


您不能在比其声明更早的位置引用后面的变量-但它仍在范围内。


查看完整回答
反对 回复 2019-10-21
?
至尊宝的传说

TA贡献1789条经验 获得超10个赞

根据C#语言规范:


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


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


编辑:只是为了澄清,C#的范围是在块级别而不是逐行解决的。因此,虽然确实不能在声明之前引用代码中的变量,但其作用域一直扩展到块的开头,这也是事实。


查看完整回答
反对 回复 2019-10-21
  • 3 回答
  • 0 关注
  • 848 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信