【问题标题】:EndPoint: Syntax in C# - what is this?EndPoint:C# 中的语法 - 这是什么?
【发布时间】:2012-06-28 21:57:19
【问题描述】:

我正在查看我最近加入的项目的一些代码,并在 .NET 3.5C# 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/Go To Definition”时,它会显示“无法导航到端点”,但整个项目非常小,编译/运行时不会出错,所以它不是缺少参考或任何东西。

什么是 EndPoint?这个名称为 {} 的语法是什么?

【问题讨论】:

  • 杀死写它的原始开发者,这是一个goto
  • 这是一个标签!那在你的 Win Forms 项目中做了什么?
  • 天哪 :p 即使在 C++ 中,我也已经好几年没见过其中之一了。我什至不知道他们在 C# 中保留了该功能:p
  • 命名一个首选标签 EndPoint 对我来说似乎是个坏主意:p 这非常具有误导性。 :(
  • {} 用于防止编译器错误。如果你删除它们,下一条语句是},C# 编译器不喜欢这样。它在我的测试类中吐出以下错误:Only assignment, call, increment, decrement, and new object expressions can be used as a statementInvalid expression term '}'; expected。 (注意,代码编译得很好,直到我删除标签后的{})。

标签: c# .net windows winforms .net-3.5


【解决方案1】:

它用于goto。见:http://msdn.microsoft.com/en-us/library/13940fs2%28VS.71%29.aspx

带有冒号的语法指定goto 语句将控制权转移到的标签。您可以在 C# 中使用它,但大多数开发人员倾向于避免使用它。有时打破嵌套循环可能会很有用(这是我能想到的最好的“合法”用法)

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

编辑:只是为了评论您在定义时遇到的错误,这是可以理解的。标签没有“定义”来源。也许goto Endpoint; 上的“去定义”可能会跳转到标签,但我不确定——从未尝试过。如果您在那里的代码只有Endpoint: 标签但在任何地方都没有goto Endpoint;,那么删除标签应该是安全的,因为(我假设)它是旧代码的未使用残余。

【讨论】:

  • 这不是“案例”陈述;如果这是您的想法,它与 switch/case 不同。
  • 触摸,我的意思是转到标签 :) 今天我的脑袋到处都是。
【解决方案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);
    }
}

【讨论】:

    猜你喜欢
    • 2010-12-13
    • 2012-02-12
    • 1970-01-01
    • 2023-04-01
    • 1970-01-01
    • 2015-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多