有没有办法表明方法永远不会返回?

时间:2018-02-26 16:14:29

标签: c#

假设我们有以下(非常基本的代码)

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代码路径也永远不会到达?

1 个答案:

答案 0 :(得分:9)

  

为什么编译器允许在第一种情况下省略return语句?

因为最终的}无法访问。这是编译器阻止的条件(并且在规范中):始终能够到达非void方法的末尾。

  

有没有办法表明编译器(或可达性分析)在第二种情况下,也永远不会达到return语句?

不,不幸的是。有许多时候是有用的(它将被定义为“此方法永远不会返回通常,即没有抛出异常”),但它没有C#功能。我相信Eric Lippert在某个时候在博客上发表了这篇文章......会试着找到这篇文章。