是的,这是有意的。这是 C♯ 继承自 C 和 C++ 的习语。如果你有一个用大括号括起来的语句,大括号通常是可选的。是否使用它们主要是样式和可读性的问题。对于嵌套using
语句,通常省略外层的大括号。
语言语法
在语法上,一个using
块后面跟着一个语句。通常这是一个块语句,但它不是必须的。
有多种说法。有表达式语句,如a = b;
. 有迭代语句,如while (boolean-expression) { ... }
. 这里整个while
循环算作一条语句。还有块语句,它由一个或多个用花括号括起来的语句组成。
有关语句的正式规范,请参阅 C# 语言规范、附录 C. 语法、§C.2.5语句:
语句:
标记语句
声明语句
嵌入语句
嵌入语句
块
空语句
表达式语句
选择语句
迭代语句
跳转语句
尝试语句
检查语句
未检查语句
锁定语句
使用语句
块
{
语句语句列表选择 }
如果您只有一条语句,通常可以省略语句周围的花括号。这些是等价的:
if (condition) statement;
if (condition) { statement; }
就像这些:
using (...)
using (...)
statement;
using (...)
using (...)
{
statement;
}
using (...)
{
using (...)
{
statement;
}
}
有时需要
也有需要大括号的例外情况。方法体必须总是有花括号。它融入了语法。
方法体:
块
;
同样,//try
子句必须有花括号。和 也是一样的。您可以在语法中看到这一点。catch 子句被定义为“catch块”而不是“catch语句”。catch
finally
checked
unchecked
try-statement:
try
block catch-clauses
try
block finally-clause
try
block catch-clauses finally-clause
specific-catch-clause:
类类型标识符opt block
general-catch-clause: block
finally-clause: block
checked-statement: block
unchecked-声明: 块
catch
(
)
catch
finally
checked
unchecked
为什么是这样?简短的回答是它消除了语法中的歧义。有关深入的解释,请参阅Eric Lippert 对这种不一致的解释。