5

我正在查看我最近加入的项目的一些代码,并在.NET 3.5的C# Win Forms Application中发现:

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# 中使用它,但大多数开发人员倾向于避免使用它。有时打破嵌套循环可能很有用(这是我能想到的最好的“合法”用法)

这是一篇关于以下一些更有用用法的精彩文章gotohttp ://weblogs.asp.net/stevewellens/archive/2009/06/01/why-goto-still-exists-in-c.aspx

编辑:只是为了评论你在定义时遇到的错误,这是可以理解的。标签没有“定义”来源。也许“去定义”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 回答