为什么在使用 Environment.Exit() 时需要 return,但对于抛出的异常则不需要?
Why is a return required when Environment.Exit() is used, but not for a thrown exception?
我正在尝试更好地理解 C# 的编译器。它坚持所有代码路径必须 return 一个值,我认为这很公平。
它还认识到,如果在需要 returned 值的路径中抛出异常,那么 returning 某些东西就没有意义了。这也有道理。
我的问题是:为什么这也不适用于以更优雅的方式退出程序?例如 Environment.Exit()
-例子-
这将编译:
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.
}
就编译器而言,Environment.Exit
只不过是一种方法。
它强制 TestMethod
return 一个值或抛出异常。调用一个 可能 终止应用程序或做一些完全不同的事情的方法不是从方法 "return" 的有效方法。
我正在尝试更好地理解 C# 的编译器。它坚持所有代码路径必须 return 一个值,我认为这很公平。
它还认识到,如果在需要 returned 值的路径中抛出异常,那么 returning 某些东西就没有意义了。这也有道理。
我的问题是:为什么这也不适用于以更优雅的方式退出程序?例如 Environment.Exit()
-例子-
这将编译:
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.
}
Environment.Exit
只不过是一种方法。
它强制 TestMethod
return 一个值或抛出异常。调用一个 可能 终止应用程序或做一些完全不同的事情的方法不是从方法 "return" 的有效方法。