假设我们有以下(非常基本的代码)
public int Foo()
{
while (true)
{
}
// No "return 0" etc. needed here.
}
编译器可以理解此方法永远不会返回,因此会显示警告,而也不需要该方法具有return
语句。
如果我们有案例
public void WontExit()
{
while (true)
{
}
}
public int Foo()
{
this.WontExit();
return default(int); // This is needed here.
}
需要return
语句,因为编译器似乎无法预见它永远不会被访问。
return
语句?为什么不需要return
声明? (这里的内部是什么?)return
代码路径也永远不会到达?答案 0 :(得分:9)
为什么编译器允许在第一种情况下省略return语句?
因为最终的}
无法访问。这是编译器阻止的条件(并且在规范中):始终能够到达非void方法的末尾。
有没有办法表明编译器(或可达性分析)在第二种情况下,也永远不会达到return语句?
不,不幸的是。有许多时候是有用的(它将被定义为“此方法永远不会返回通常,即没有抛出异常”),但它没有C#功能。我相信Eric Lippert在某个时候在博客上发表了这篇文章......会试着找到这篇文章。