返回void函数的结果

时间:2016-06-03 15:15:46

标签: c#

[免责声明]:我知道" void"并且"返回"。问题是关于语言的语法和方便性。在假设我没有阅读任何文档之前,请将其读到最后。

我想知道为什么在单行语句中无法返回void函数的结果。

例如,以下代码示例无法编译:

class Program
{
    static void Main(string[] args)
    {
        return Usage(); // fails
    }

    static void Usage()
    {
    }
}

投掷:

  

错误CS0127:因为' DProgram.Main(string [])'返回void,返回   关键字后面不能跟一个对象表达式

我显然可以分为两行,如

Usage();
return;

但是使用单行语句会很方便。

在生成的MSIL(正确的拆分版本)中,

我可以看到:

.method private hidebysig static 
    void Main (
        string[] args
    ) cil managed 
{
    // Method begins at RVA 0x2050
    // Code size 6 (0x6)
    .maxstack 8
    .entrypoint

    IL_0000: call void DirectoryCompileAndRun.Program::Usage()
    IL_0005: ret
} // end of method Program::Main

如果两个方法(Main和Usage)确实返回相同的非空类型,那么这就是生成的内容。所以很明显,原因与中间表示无关,而是纯粹与C#设计有关。

有没有人知道这个编译器的原因"限制"?

0 个答案:

没有答案