0

C# では、この例のように中かっこを使用せずに if ステートメントを定義できます。

  if (GamePad.GetState(PlayerIndex.One).Buttons.Back == ButtonState.Pressed)
                this.Exit();

ここで this.Exit(); if に関連付けられたステートメントです。しかし、それは中かっこではないので、私の質問は、if とどのように関連付けられているかです。

コンパイラが空白を無視することを学びましたが、この場合、これは論理的に意味がありません。答えは、IDE がインデントを見つけて、コンパイル時に自動的に中括弧に入れるという単純なものですか?

4

8 に答える 8

3

コードがコンパイラによって解析されると、各セクションが字句ブロックに分割されます。「if」ステートメントの構文は次のとおりです。

if ( Expression ) Statement else Statement

また

if ( Expression ) Statement

ステートメントは、ステートメント ブロック (中かっこで囲まれたもの) または単一のステートメントのいずれかです。コードでは、式が閉じられており、 ' がステートメントの構文に準拠しis.Exit()ているという事実により、th 呼び出しが if ブロックに関連付けられています。'this.Exit()

http://ecma-international.org/ecma-262/5.1/

于 2012-07-17T10:48:16.810 に答える
3

;ステートメントを終了します。

ステートメント (C# プログラミング ガイド)

ステートメントは、セミコロンで終わる単一行のコード 、またはブロック内の一連の単一行ステートメントで構成できます。ステートメント ブロックは {}角かっこで囲まれ、ネストされたブロックを含めることができます。

于 2012-07-17T10:45:57.340 に答える
1

C# と Java のブレースは、基本的に複数のステートメントを特定の状況下でのスコープとして基本的に理解されるブロック セットにします。

  • 1 つまたは複数のステートメントを中かっこで囲むか、コメントが含まれているかどうかに関係なく、領域を空白のままにすることができます。

  • デフォルトでは、コンパイラはコードに記述されたすべての文字をシークするため、文字ごとに移動し、開始を確認する{と、終了が必要であると予想し}ます。さらに左中かっこが見つかった場合は、コード ブロックのカウントを続けます。

  • {後に開始がない場合if/else/foreach/for/do/while、コンパイラは、任意の即時ステートメントをブロックの一部と見なします;

  • すぐif/else/foreach/for/do/while;

多くの人がすでにそれを知っているか、使用しているかもしれないので、この質問のおかげで私は提案しています...

  • { }ブロックにはいくつかの用途があります。すべてのループ、if-elseステートメント、さらにはswitch-case中かっこを使用してコードをスコープに入れることができます。私にとって、case ステートメントをブロックに入れることは非常に役に立ちます。あるケースで変数を定義すると、同じスイッチの下で別のケースで同じ名前で定義することはできません...したがって、次の構文を使用します。

            int abc = 1;
            switch (abc)
            {
                case 1:
                    {
                        var x = 11;
                    }
                    break;
                case 2:
                    {
                        var x = 11; // its legal. 
                    }
                    break;
                case 3:
                    var x = 11; // its ilegal here too.. because we already have it in previous scope. 
    
                    break;
                case 4:
                    {
                        var x = 11; // its illegal here because we already have a in the parent/current scope. 
                    }
                    break;
            }
    
  • 同じ考え方で変数を宣言することもできます:

            ... some code above
    
            {
                var xx = 10;
            }
    
            // xx - is not available as it was declared in the inner-scope
    
            {
                var xx = 11; // Its legal, because its declared in inner-scope.
            }
    
            // xx - is again not available as it was declared in the inner-scope
    
            ... some code below 
    

概要:

  • {後に左中括弧がない場合if/else/foreach/for/do/while、次の即時ステートメントは if/else/foreach/for/do/whileブロックの一部と見なされます。
  • 同じ変数名を使用するために、シーケンシャル ステートメント内にいくつでもスコープを作成できます。
于 2012-07-17T11:35:33.210 に答える
0

「 ; 」は、ステートメントの終わり/終了点を指します。そのため、コンパイラがこれを最初に見つけたとき、それを IF ブロックに含め、IF 句にはその他を含めません。

于 2012-07-17T11:06:13.363 に答える
0

C# では、if ステートメントは、角かっこで if を使用するように、角かっこに基づいてコマンドを実行します。ブラケットが指定されていない場合、ステートメントが true の場合は次のコマンドを実行し、その後にコマンドを実行します。条件が false の場合は、次のコマンドに進みます。

于 2012-07-17T10:48:14.153 に答える
0

1 行でしか機能しないため、複数行の if ステートメントが必要な場合は、中かっこを使用する必要があります。

したがって、コンパイラは、(条件が true の場合) 次の行で使用する必要がある、中かっこのない if ステートメントがあることを認識しています。

于 2012-07-17T10:44:04.780 に答える
0

いいえ、中かっこは複数行のステートメント用です。したがって、空白とインデントは無関係です。if ステートメントと同じ行で this.Exit() 呼び出しを行うことができますが、それでも問題ありません。一部の人々は、読みやすさのために単一行のステートメントに中かっこを使用することを好みますが、それは選択の問題です。

于 2012-07-17T10:44:17.510 に答える
0

if の単一の Line ステートメントの場合、ステートメントを中かっこで囲む必要はありません。

複数のステートメントを実行する必要がある場合は、中かっこが必要です。

于 2012-07-17T10:44:18.353 に答える