变量的有效性范围



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

嘿伙计们,今天我发现了一个我不确定的问题:

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

 {
     int x = 0;
 }
 int x;

但是如果我尝试这个例子,我会收到错误:"局部变量名称"x"不能在此范围内声明,因为它会赋予"temp"不同的含义,后者已经在父级或当前作用域中用于表示其他内容。

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

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

谢谢你,美好的一天;)

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

int x;
{
  int x = 0;
}

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

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

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

{
  int x = 0;
}
{
  int x;
}

最新更新