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

Ram*_*ran -3 c# syntax return visual-studio

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

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

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

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

见下图

在此输入图像描述

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

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

private void install()
    {
        http://www.stackoverflow.com
        return;
    }
Run Code Online (Sandbox Code Playgroud)

编辑:

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

p.s*_*w.g 9

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

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

8.4标记语句

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

标签声明:

 identifier : 声明

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

进一步阅读


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

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

return 0; 
Run Code Online (Sandbox Code Playgroud)

产生错误:

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

  • @RameshRajendran你的功能中根本没有变量.`http:`是标签`// stackoverflow.com`是评论.两者都是C#语法的完全有效元素,但它们与变量无关,在这种情况下,它们在您的方法中不执行任何操作. (2认同)