为什么编译器对此代码的行为有所不同?

Dha*_*ana 8 c# compiler-errors

在C#中,以下方法将无法编译:

public bool IsItTrue()
{
}
Run Code Online (Sandbox Code Playgroud)

编译器错误:'IsItTrue()':并非所有代码路径都返回一个值,这非常有意义.但是下面的编译没有任何问题.

public bool IsItTrue()
{
    while (true)
    {
    }
}
Run Code Online (Sandbox Code Playgroud)

哪个看起来不对,因为根本没有退货声明.为什么会这样?这里有任何帮助...,

Luk*_*keH 13

编译器知道第二种方法永远不会返回.

如果这两种方法曾经在任何情况下返回那么他们必须返回bool.

第一种方法不包含任何无限循环,不抛出任何无条件异常等,因此必须返回一个bool.代码不返回,bool因此编译器拒绝编译它.

由于无限while (true)循环,第二种方法永远不会返回.如果从来没有返回那并不重要(如果有的话)是永远不会回到这样编译器将允许它进行编译.

编译器将识别并允许的更多示例:

public bool IsItTrue()
{
    throw new Exception("Always thrown!");
}

public bool HowAboutThisOne()
{
    if ((46 - 3) < (27 * 9))
    {
        throw new Exception("Always thrown!");
    }
}
Run Code Online (Sandbox Code Playgroud)