[免责声明]:我知道" 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#设计有关。
有没有人知道这个编译器的原因"限制"?