3

可能重复:
为什么不能在嵌套的局部范围内声明重复的变量名?

大家好,今天我发现了一个问题,我不确定:

我认为下面的例子应该是正确的,因为大括号创建了一个新的局部区域,所以我不能访问大括号之后的第一个 x,我应该能够在右大括号之后创建一个同名的新变量。

 {
     int x = 0;
 }
 int x;

但是如果我尝试这个例子,我会得到错误:“不能在这个范围内声明一个局部变量名“x”,因为它会给“temp”赋予不同的含义,它已经在父范围或当前范围中用于表示别的东西。”

这在 C# 中真的不允许吗?这也可能是 ReSharper 7.0 或 Visual Studio 2012 的故障。

请不要提出不好的编码风格,这只是我对c#的基本理解。

谢谢你,美好的一天;)

4

1 回答 1

4

问题是首要地位并不重要。您不会期望这会起作用:

int x;
{
  int x = 0;
}

为什么不?因为第一个变量的范围延伸到大括号中。即使第二个变量的范围没有超出这些括号,声明第二个变量也会导致问题。

如果您颠倒顺序,同样的原则也适用。第一个变量不会阻止您声明第二个变量,但第二个变量会阻止您声明第一个变量。

如果您在其自己的范围内创建第二个变量,它将按照您期望的方式运行。

{
  int x = 0;
}
{
  int x;
}
于 2012-09-18T22:35:41.013 回答