为什么可以在函数中放置无限空括号?

时间:2014-04-25 15:21:04

标签: c# compilation

编程时,我意识到我可以在函数的任何地方插入带有闭括号的开括号(即使它不适用于条件语句/使用语句/或循环等)。

    private Int32 OutsideSquare(Int32 value)
    {
        Int32 square;
        {
            square = value * value; // Compile and work!
        }
        return square;
    }

    private Int32 InsideSquare(Int32 value)
    {
        {
            Int32 square = value * value; // Doesn't compile - not in context!
        }
        return square;
    }

为什么编译器会接受这个?为什么" OutsideSquare"编译但不是" InsideSquare"当两者似乎"忽略"结果的括号?

2 个答案:

答案 0 :(得分:4)

是的,编译器接受函数内的任意一对括号,但它们不会被简单地忽略。括号创造范围。括号内声明的任何变量都不能在括号外使用。例如,请考虑以下程序:

static void Main(string[] args)
{
    {
        string s = "Hello world";
        Console.WriteLine(s);     // works fine
    }

    Console.WriteLine(s);         // error!
}

第二次调用Console.WriteLine(s)会产生如下错误:

  

这个名字' s'在当前上下文中不存在

因为变量s仅在括号范围内定义。这与您使用InsideSquare方法看到的问题相同。您不能使用超出定义范围的变量。

答案 1 :(得分:1)

  

似乎都“忽略”了结果的括号?

它被称为范围和在范围内声明的变量usng { }仅在该块内可用