5

最近参加したプロジェクトのいくつかのコードを確認していて、 .NET 3.5のC# Win Forms アプリケーションで次のことを見つけました。

public void foo()
{
    //Normal code for function foo.

//This is at the end and it is left-indented just as I put it here.
EndPoint:
    {
    }
}

「エンドポイント/定義に移動」をクリックすると、 「エンドポイントに移動できません」と表示されますが、プロジェクト全体は非常に小さく、エラーなしでコンパイル/実行されるため、参照の欠落などではありません。

EndPoint とは何ですか? {} という名前のこの構文は何ですか?

4

2 に答える 2

5

そのためgotoです。参照: http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

gotoコロンを含む構文は、ステートメントが制御を転送するラベルを指定します。C# で使用できますが、ほとんどの開発者は使用を避ける傾向があります。ネストされたループから抜け出すと便利な場合があります (「正当な」使用法としては、これが最善の方法です)。

のより便利な使用法のいくつかについての素晴らしい記事を次に示しgotoます

編集:定義に行くことについて得たエラーについてコメントするだけで、それは理解できます。ラベルの「定義」ソースはありません。おそらく「定義に移動」するとgoto Endpoint;、ラベルにジャンプする可能性がありますが、よくわかりません-試したことはありません。Endpoint:そこにあるコードにラベルしかなく、goto Endpoint;どこにもない場合は、古いコードの未使用の残骸であるため、ラベルを削除しても安全です。

于 2012-06-27T12:56:40.407 に答える
2

他の人はそれが何であるかを説明しましたEndPoint:。余分なブレースは新しいスコープを作成しています。内部スコープを作成することで、次のようなことができます

public Foo()
{
    {
        int bar = 10;
        Console.WriteLine(bar);
    }

    Console.WriteLine(bar); //Error: "Cannot resolve symbol bar."  It does not exist in this scope.

    {
        int bar = 20;  //Declare bar again because the first bar is out of scope.
        Console.Writeline(bar);
    }
}
于 2012-06-27T13:02:39.793 に答える