编程时,我意识到我可以在函数的任何地方插入带有闭括号的开括号(即使它不适用于条件语句/使用语句/或循环等)。
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"当两者似乎"忽略"结果的括号?
答案 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 { }
仅在该块内可用