具有任何返回类型的函数体有效的语句

qqb*_*enq 5 c#

这个问题(或者更具体地说是这个答案)让我想知道:哪些语句在C#中作为具有任何返回类型的函数体是有效的?

例如:

public void Foo()
{
    while (true) { }
}

public int Foo()
{
    while (true) { }
}
Run Code Online (Sandbox Code Playgroud)

这两个函数都是有效的C#函数,即使第二个函数没有真正返回int.

所以我知道无限循环(例如for(;;))和throw new Exception()类似的throw语句作为任何函数的主体是有效的,但是有更多的语句具有该属性吗?


更新:

我想到了另一个解决方案,一个无限的递归:

    public string Foo()
    {
        return Foo();
    }
Run Code Online (Sandbox Code Playgroud)

Mat*_*and 3

有趣的是,与第二个片段没有真正不同的一个示例是:

public static int Foo()
{
    do {}
    while (true);
}
Run Code Online (Sandbox Code Playgroud)

但我不认为这真的算“不同”。

另外,还有一个例子说明为什么goto是邪恶的:

public static int Foo()
{
    start:
    goto start;
}
Run Code Online (Sandbox Code Playgroud)

有趣的是,这确实会产生编译错误:

public static int Foo()
{
    bool b = true;
    while (b) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

尽管b没有改变。但如果你明确地使其保持不变:

public static int Foo()
{
    const bool b = true;
    while (b) 
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

它又起作用了。