C#:为什么这个变量在范围内并且同时超出范围?

时间:2011-03-31 16:42:45

标签: c# scope

  

可能重复:
  C# Variable Scoping

我遇到过以前从未遇到的事情。 我不是在寻找修复因为我知道如何解决它。我想知道的是编译器正在做什么。这只是示例代码:

if (true)
{
    int x = 0;
}
int x = 0;

该代码产生错误“无法在此范围内声明局部变量'x',因为它会给'x'赋予不同的含义。”

但是,我将代码更改为:

if (true)
{
    int x = 0;
}
x = 0;

我收到错误“无法解析符号'x'”。

那么,这里发生了什么? x是如何在范围内和超出范围?

2 个答案:

答案 0 :(得分:5)

变量的范围是声明它的整个块。但是,在之后声明之前,你不能引用

Eric Lippert对blog post有一个更详细的信息。编辑:正如埃里克指出的那样,another one ......

答案 1 :(得分:0)

它不是,只是因为C#允许你在程序中的任何地方声明/定义变量,它的作用域是声明它的整个块,所以它使x预先声明/ {范围内)x块中的if