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

Bob*_*Bob 4 c# scope

可能重复:
C#变量范围

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

if (true)
{
    int x = 0;
}
int x = 0;
Run Code Online (Sandbox Code Playgroud)

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

但是,我将代码更改为:

if (true)
{
    int x = 0;
}
x = 0;
Run Code Online (Sandbox Code Playgroud)

我收到错误"无法解析符号'x'".

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

Jon*_*eet 5

变量的范围是声明它的整个块.但是,在声明之后才能引用它.

Eric Lippert有一篇关于此的博文,详细介绍了这一内容.编辑:正如埃里克指出的那样,另一个 ......