Почему возврат требуется при использовании Environment.Exit (), но не для брошенного исключения? - PullRequest
2 голосов
/ 18 апреля 2019

Я пытаюсь лучше понять компилятор для C #. Он настаивает на том, что все пути кода должны возвращать значение, и я думаю, что это довольно справедливо.

Он также признает, что если в пути, где необходимо вернуть значение, возникает исключение, то нет смысла что-либо возвращать туда. Это также имеет смысл.

Мой вопрос: почему это не относится к более изящному выходу из программы? например, Environment.Exit()

-Examples-

Это скомпилирует:

private string TestMethod(int x, int y)
{
    if (x == y)
    {
        return "this is a string";
    }
    throw new Exception(); 
    // No point in a return after this, it could never be reached.
}

Это НЕ скомпилируется:

private string TestMethod(int x, int y)
{
    if (x == y)
    {
        return "this is a string";
    }
    Environment.Exit(1);
    // This will not compile.
    // "Not all code paths return a value"
    // But, the code would never make it to the return here.
}

1 Ответ

7 голосов
/ 18 апреля 2019

Environment.Exit - это не что иное, как метод в том, что касается компилятора.

Он обеспечивает, что TestMethod либо возвращает значение, либо выдает исключение. Вызов метода, который может завершить приложение или сделать что-то совершенно другое, не является правильным способом "возврата" из метода.

...