当前位置: 首页 > 知识库问答 >
问题:

为什么在使用Environment.exit()时需要返回,而对于抛出的异常则不需要?

田博远
2023-03-14

我试图更好地理解C#的编译器。它坚持所有代码路径必须返回一个值,我认为这是相当公平的。

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个答案

林浩漫
2023-03-14

编译器而言,environment.exit只不过是一个方法。

它强制TestMethod返回值或引发异常。调用可能终止应用程序或执行完全不同的操作的方法不是从方法“返回”的有效方式。

 类似资料:
  • 问题内容: 考虑以下代码: 无需添加方法签名即可编译该代码。(它与同样表现到位,太)。 我理解为什么 可以 安全地运行它,因为实际上不能将其引发在块中,因此不能引发已检查的异常。我有兴趣知道在何处指定此行为。 并非永远都不会达到目标:以下代码也会编译: 但是,如果抛出一个检查的异常,它不会像我期望的那样编译: 在JLS Sec 11.2.2中 ,它说: 一,其抛出的表达式语句(§14.18)具有静

  • 我正在尝试使用HttpWebRequest验证Url的存在。我发现了一些基本上这样做的示例: 但是,如果url确实损坏了,它不会返回响应,而是抛出异常。 我将代码修改为: 这似乎终于做到了我想要的。 但是我想知道,为什么请求会抛出异常,而不是返回带有NotFindstatus代码的响应?

  • 是否由于编译器假定它将在此实例中返回一个int值,所以即使抛出了异常,也不能返回异常?

  • /usr/include/c++/7.2.0/bits/stl_function.h:在'constexpr bool std::greater<_tp>::operator()(const_tp&,const_tp&)const[with_tp=MyStruct]': /usr/include/c++/7.2.0/bits/stl_function.h:376:20:错误:与'operator>

  • 我正在学习Rust,我发现函数有些混乱。根据官方参考,一个返回表达式: ...[is]用关键字返回表示。评估返回表达式将其参数移动到当前函数的输出槽中,破坏当前函数激活帧,并将控制权转移到调用者帧。 所以,这个程序工作: 当我在“返回”表达式中添加分号时,它仍然有效: 我对表达式语句(例如)的理解是,它将计算表达式,并忽略结果(而是使用)。如果使用

  • 下面是我的代码。当我运行它时,我在线程“main”java.lang.IndexOutOfBoundsException:Index:3、Size:2中得到异常,而不是我的异常消息。谁能解释一下我做错了什么,为什么会这样?谢谢!