为什么我会收到错误?

san*_*ngh 0 c#

可能重复:
语句块中的变量范围

我在c#中有以下代码片段,但是不起作用

 static void Main(string[] args)
        {
            if (true)
            {
                string name = "test";
            }
            else
            {
                string name = "hello";
            }
            string name = "world";
        }
Run Code Online (Sandbox Code Playgroud)

它给出了一个错误,说'name'已经在最后一行声明了,但是如果我改变它就'name = "some string"说没有声明变量名.

Ode*_*ded 5

C#中的作用域规则与C不同 - 如果在外部作用域中声明变量名称,则在内部作用域之后声明它是无关紧要的.

你在声明string name之外声明了一个变量这一事实if意味着它可以在声明的块中使用if/else.

编译器抱怨,因为您在声明中声明了具有相同名称的其他变量if/else.

如果从最后一行中删除类型,那么变量仅在内部范围内声明,if/else但在它们之外是未知的,因此"未声明变量名称"错误.

以下将编译得很好:

    static void Main(string[] args)
    {
        string name = "world";
        if (true)
        {
            name = "test";
        }
        else
        {
            name = "hello";
        }
    }
Run Code Online (Sandbox Code Playgroud)

这里,变量在外部作用域中声明,因此在内部作用域中可见.你没有在内部范围内重新声明它,所以没有错误.

从你的问题来看,这是否是你想要的并不清楚.