为什么我不能在 C# 中的不同作用域中声明具有相同名称的变量?

Dav*_*gal 5 c# scope

不确定这是否是因为 C# 编译器非常挑剔,但我尝试在 C# 中执行此操作:

public static void Main()
{
    bool result = true; // some dummy value
    if(result)
    {
        int x = 5;
        Console.WriteLine(x);
    }

    int x = 10;
    Console.WriteLine(x);
}
Run Code Online (Sandbox Code Playgroud)

编译器抱怨变量名“x”已被使用:

不能在此作用域中声明名为“x”的局部变量,因为它会给“x”赋予不同的含义,而“x”已在“子”作用域中用于表示其他内容。

我知道它认为这是一个范围问题,但为什么它会这么认为呢?

如果我用 Java 重现相同的代码,就没有问题。

Bla*_*rog 2

并不是每个人{}都会开始一个新的范围。if 块中声明的整数仍然与函数位于同一堆栈上。