为什么我不能在C#中的不同范围内声明一个具有相同名称的变量?

这个问题在这里已经有了答案:

  • 为什么C#不允许我在不同的作用域中使用相同的变量名? 5个答案

  • 并非每个{}启动一个新的范围。 在if块中声明的整数与函数仍然在同一栈中。


    从MSDN编译器错误CS0136

    对于表达式或声明符中每个出现的给定标识符作为简单名称,在局部变量声明空间(§3.3)内立即包含该事件,在表达式或声明符中每隔一次出现与简单名称相同的标识符必须提及同一个实体。 该规则确保名称的含义在给定块,开关块,for-,foreach或using语句或匿名函数中始终保持相同。

    作为第二个参考,请检查C#答案中的变量范围混淆,您可以在其中找到好的信息。

    您可以在不重叠的范围中使用相同的变量名称。 但是,如果一个范围与另一个范围重叠,则不能在两者中声明相同的变量。 原因是为了防止您意外地在内部范围内使用已经使用的变量名称


    正如@BlackFrog正确指出的那样,每个{ }都不会启动新的作用域。 从C#语言规范§3.3:

    •每个方法声明,索引器声明,运算符声明,实例构造函数声明和匿名函数创建一个称为局部变量声明空间的新声明空间 。 通过形式参数(固定参数和参数数组)和类型参数将名称引入此声明空间。 函数成员或匿名函数的主体(如果有)被认为嵌套在局部变量声明空间中。 局部变量声明空间和嵌套局部变量声明空间包含具有相同名称的元素是错误的。

    (强调我的)

    链接地址: http://www.djcxy.com/p/53051.html

    上一篇: Why can't I declare a variable with the same name in different scopes in C#?

    下一篇: Local variable scope error