这个问题(或者更具体地说是这个答案)让我想知道:哪些语句在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)
有趣的是,与第二个片段没有真正不同的一个示例是:
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)
它又起作用了。