はい、これは意図したものです。C♯がCやC++から受け継いだイディオムです。中かっこで囲まれた単一のステートメントがある場合、中かっこは通常オプションです。それらを使用するかどうかは、主にスタイルと読みやすさの問題です。ネストされたusing
ステートメントの場合、外側のレイヤーのブレースを省略するのが一般的です。
言語文法
文法的には、using
ブロックの後にステートメントが続きます。通常、これはブロック ステートメントですが、そうである必要はありません。
いろいろな発表があります。のような式文がありますa = b;
。のような反復文がありますwhile (boolean-expression) { ... }
。ここでは、ループ全体while
が 1 つのステートメントとしてカウントされます。また、中かっこで囲まれた1 つまたは複数のステートメントで構成されるブロック ステートメントがあります。
ステートメントの正式な仕様については、C# 言語仕様、付録 C. 文法、§C.2.5 ステートメントを参照してください。
ステートメント:
ラベル付けされたステートメント
宣言ステートメント
埋め込みステートメント埋め込み
ステートメント
:
ブロック
空
の
ステートメント
式
ステートメント
選択
ステートメント
反復
ステートメント
ジャンプ
{
ステートメントリストオプト }
通常、ステートメントが 1 つだけの場合、ステートメントを囲む中括弧は省略できます。これらは同等です:
if (condition) statement;
if (condition) { statement; }
これらは次のとおりです。
using (...)
using (...)
statement;
using (...)
using (...)
{
statement;
}
using (...)
{
using (...)
{
statement;
}
}
時々必要
中括弧が必要な例外があります。メソッド本体には常に中かっこが必要です。それは文法に焼き付けられています。
メソッド本体:
ブロック
;
同様に、try
/ catch
/finally
句には中括弧が必要です。checked
と についても同じですunchecked
。これは文法を見ればわかります。catch 句は、「catchステートメント」ではなく「catchブロック」として定義されます。
try-statement:
try
block catch-clauses
try
block finally-clause
try
block catch-clauses finally-clause
specific-catch-clause:
class-type identifier opt block
general-catch-clause: block
finally-clause: block
checked-statement: block
unchecked-ステートメント: ブロック
catch
(
)
catch
finally
checked
unchecked
どうしてこれなの?簡単な答えは、文法のあいまいさを排除することです。詳細な説明については、この不一致に関する Eric Lippert の説明を参照してください。