4

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

我找到了关于为什么的答案,在这里找到(为什么 try..catch 块需要大括号?)非常有趣。

我想知道更多需要花括号而不是良好实践等的示例,最好是使用代码片段和解释原因。

4

4 回答 4

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 的语言中,假设在某些情况下是可能的,没有人认为将它们设为可选是有道理的。

于 2011-08-04T10:14:41.147 回答
1

您必须在 and 中使用大括号圆括号,具体取决于您将它们视为运算符还是语句: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();
于 2011-08-04T10:20:41.717 回答
1

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

if (someValue == true)
    doSomething();

在这种情况下,不需要大括号,但是您可以用大括号包围该语句,因为您只有一个语句将在 if 检查之后执行,但是如果您想在 if 中执行多个语句,则需要使用大括号。例如,

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

不允许尝试这样的事情:

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

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

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

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

在这里,您会期望 i 增加,但这永远不会发生。基本上这个循环和这个循环是一样的:

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

i++;

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

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

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

于 2011-08-04T10:23:11.123 回答
0

类/结构/接口声明

类 X { int _myval }

于 2011-08-04T10:17:12.740 回答