在我的回答中:C# Lock syntax - 2 questions,LukeH指出try...catch...(finally)
语句需要大括号。
我找到了答案,为什么,这里(Why do try..catch blocks require braces?)非常有趣。
我想知道更多的例子,大括号是必需而不是良好做法等,理想情况下是代码片段和解释原因。
答案 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)
您必须使用 括号或括号checked
和unchecked
,具体取决于您是将它们视为运算符还是语句:
// 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}