2017-09-08 9 views
0

は、次のことを考えてみましょう:C#でコードラベルを作成しようとすると構文エラーが発生するのはなぜですか?

class abc { 
    public void foobar() { 
     while(true) { 
      while(true) { 
       goto mylabel; 
      } 
     } 
     mylabel: 
    } 
} 

私は構文エラーを取得:mylabelというの言うこと:

をのみ割り当て、呼び出し、インクリメント、デクリメント、待つ、と 表現が可能な新しいオブジェクトステートメントとして使用

私はここで私の心を失っていますか?私は間違って何をしていますか?私は上下にgoogledして、それは私の構文が正しいようです。

+0

2つの可能性が浮かび上がっています。1)ミラベルには何の声明もありません。 (「goto識別子ステートメントのターゲットは、指定されたラベルを持つラベル付きステートメントI」です。https://msdn.microsoft.com/en-us/library/aa664758(v=vs.71).aspxを参照してください。2)私はmylabelが範囲にあることを期待していますが、もし私が間違っていれば、それは第二の可能性です。 たとえば、mylabelの後にConsole.WriteLineを追加してみてください。 –

答えて

3

ラベルの後ろに、ステートメントが必要です。閉鎖}はステートメントではなく、コードブロックを終了しています。あなたはここにempty statement (;)を使用することができます。

mylabel: ; 

をリンクされたページでも述べている:

をまた、空の文がちょうどブロックの閉鎖「}」の前にラベルを宣言するために使用することができます。

+0

また、何も実行されない場合は 'goto'ではなく' return'を使うだけです。 –

+0

男私は今や気分が悪い。明らかになったはずのもう1行のコードを書いたばかりです。ハハ。私は窓が私に許されるとすぐに答えをマークします。 – dmarra

+0

@ JohnWuはい、この例では可能です。しかし、提供されたコードはMCVEに簡素化されているようですので、これはより一般的な答えです。 – clcto

関連する問題