时间:2011-08-04 09:54:48

标签: c# curly-braces curly-brackets

在我的回答中:C# Lock syntax - 2 questionsLukeH指出try...catch...(finally)语句需要大括号。

我找到了答案,为什么,这里(Why do try..catch blocks require braces?)非常有趣。

我想知道更多的例子,大括号是必需而不是良好做法等,理想情况下是代码片段和解释原因。

4 个答案:

答案 0 :(得分:2)

围绕一个方法体。

// not allowed:
int Inc(int x) 
     return x+1; 

为什么并不那么容易,看起来老式的C需要它比C ++ / C#更多。

更多关于为什么这个部分,在(非常)旧的C中你会写

int Sum()
int a, b; // parameters, very informal
{
   int s; // local var
   ...
}

所以这个古老的语法需要括号。在所有基于C的语言中,没有人看到过将它们作为可选项的观点,假设在某些情况下这是可能的。

答案 1 :(得分:1)

您必须使用 括号括号checkedunchecked,具体取决于您是将它们视为运算符还是语句:

// legal operator
int y = checked(x * 2);

// legal statement
unchecked
{
    if ((a * b) > c)
    {
        DoSomething();
    }
}

// illegal operator
int y = checked x * 2;

// illegal statement
unchecked
    if ((a * b) > c)
        DoSomething();

答案 2 :(得分:1)

语言的某些部分需要括号。例如,当您启动方法时,您必须打开和关闭大括号以将其标识为代码块。在函数内部,某些语言特征如循环,条件语句等也接受大括号,尽管在某些情况下它们不是必需的。例如:

if (someValue == true)
    doSomething();

在这种情况下,不需要大括号,但是你可以用大括号包围这个语句,因为你只有一个语句将在check之后执行,但如果你想在一个内部执行多个语句,如果你需要使用大括号。例如,

if (someValue == true)
{
    doSomething();
    doSomeMoreWork();
}

不允许尝试这样的事情:

if (someValue == true)
    doSomething();
    doSomeMore();
else
    doWork2();
    int i = 1 + 2;

编译器会在这种情况下抱怨。

最好在以下循环中看到问题:

while(i < 10)
    doSomeWork();
    i++;

在这里你会期望我增加,但这永远不会发生。基本上这个循环与这个循环相同:

while(i < 10)
{
    doSomeWork();
}

i++;

块内的语句将以infinetly方式执行,我永远不会增加。在这种情况下,编写此语句的正确方法是:

while(i < 10)
{
    doSomeWork();
    i++;
}

现在你有一个正常工作的声明。无论正在执行的语句数量多少,我都喜欢一直使用大括号。这样做的原因是迟早我可能需要在if语句或for或foreach循环中添加更多工作。这只是一个很好的做法。

答案 3 :(得分:0)

class / struct / interface declaration

  

class X {int _myval}