4

ここでの私の回答: C# Lock syntax - 2 Questionsで、LukeHtry...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 に基づくすべての言語では、場合によってはそれが可能であると仮定して、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 チェックの後に実行されるステートメントが 1 つしかないため、このステートメントを中かっこで囲むことができますが、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++;

ブロック内のステートメントは無限に実行され、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 に答える