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

时间:2013-12-13 05:39:10

标签: c# visual-studio syntax return

大家好昨天我发了一个问题:像c#allow; ; ; ; ; ; ; ; ; ; ; ; (C# Empty Statement

Why C# allow this fun? ; ; ; ;

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

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

见下图

enter image description here

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

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

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

修改

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

1 个答案:

答案 0 :(得分:9)

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

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

来自8.4 Labeled statements

  

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

     

标记的语句

     

标识符声明

     

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

进一步阅读


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

如果您尝试返回特定值, 会出错:

return 0; 

产生错误:

  

由于'MyPage.Page_Load'返回void,因此返回关键字后面不能跟一个对象表达式