C#: 为什么这个变量在同一时间内既在作用域内又在作用域外?

4

可能是重复问题:
C#变量作用域

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

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

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

然而,如果我将代码更改为以下内容:

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

我遇到了“无法解析符号'x'”的错误。
那么这是怎么回事呢?为什么x既在作用域内又在作用域外呢?

我之前注意到这个问题并且感到困惑。个人认为第一个应该可以编译通过,而第二个则不应该能够编译通过。 - Rob Levine
2个回答

5

变量的作用域是在其声明的整个块中。但是,在声明之后才能对其进行引用。

Eric Lippert在博客文章中详细介绍了这一点。编辑:正如Eric所指出的那样,另一个博客文章......


你可以直接引导他们查看他的相关答案 :o) https://dev59.com/CnI-5IYBdhLWcg3wBjnk#2050864 - Matthew Whited
@Matthew:我知道有一篇博客文章;我不知道Eric回答了一个SO问题。 - Jon Skeet
一开始我也不知道,但我知道我之前看过这个问题。 - Matthew Whited
谢谢Jon;实际上,这篇文章更相关于具体的问题:http://blogs.msdn.com/b/ericlippert/archive/2009/11/02/simple-names-are-not-so-simple.aspx - Eric Lippert

0

不是这样的,仅仅因为 C# 允许你在程序的任何位置声明/定义变量,其作用域是它所声明的整个块,因此它使得 xif 块中预先声明/(在作用域内)


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接