C#代码允许有趣的语法,而且void方法也允许返回

大家好昨天我发了一个问题:像c#allow; ; ; ; ; ; ; ; ; ; ; ; ( C#空声明 )

为什么C#允许这个有趣? ; ; ; ;

并找到答案: https : //stackoverflow.com/a/20551989/2218635

但今天我看到了另一个有趣的(bug)

见下图

在此处输入图像描述

为什么visual studio允许这个? 代码构建成功。 为什么要构建?

另外一个有趣的代码总是运行

private void install() { http://www.stackoverflow.com return; } 

编辑

看上面的方法是一个void方法,我知道void方法不返回。 但为什么没有显示任何错误? 我没有为“ http://www.stackoverflow.com ”分配任何变量。但为什么它不给我一个错误?

该方法的构建是因为它是完全有效的C#。

那些是标签。 它们是C#从C / C ++inheritance的goto构造的一部分,它允许执行跳转到方法中的特定点。 通常不鼓励使用它。

从8.4标记语句

标签的语句允许语句以标签为前缀。 块中允许使用带标签的语句,但不允许使用嵌入语句。

标签声明

identifier声明

带标签的语句声明一个标签,其名称由标识符指定 。 标签的范围是声明标签的整个块,包括任何嵌套块。 具有相同名称的两个标签具有重叠范围是编译时错误。

进一步阅读

  • 有人还在C#中使用[goto],如果是这样,为什么?

关于更新的问题。 请注意, return语句中没有提供任何值。 在void方法中以这种方式使用return是完全有效的。 这只会导致执行停止并将控制权转移回调用者。 实际上,您可以想到在每个方法都有一个隐含的return语句,然后将控制权返回给调用者。

如果您尝试返回特定值,那是一个错误:

 return 0; 

产生错误:

由于’MyPage.Page_Load’返回void,因此返回关键字后面不能包含对象表达式