C# throw 语句多余?

标签 c# java exception

我有一个看起来像这样的代码(抱歉使用 Java 括号样式):

class SomeClass {
   public static void doSomethingRisky() {
        try {
          SomeRiskyFunction();
        } catch (Exception e) {
          throw e;
        }
   }
}

class MainClass {
   public void callSomethingRisky() {
        try {
          SomeClass.doSomethingRisky();
        } catch (Exception e) {
          FinallyHandleTheException(e);
        }
   }
}

基本上,SomeClass 将是一个库,我想将其设计为所有异常都将由调用程序处理(调用程序可能会也可能不会选择显示有关异常的消息)。

我的问题是关于 SomeClassdoSomethingRisky()try/catch&throw 的使用。是多余的还是有必要的?我的意思是,如果我将其关闭并且该函数在运行时确实遇到异常,它是否会导致程序崩溃,因为该函数内部没有任何内容捕获异常,或者它是否仍将其传递给调用者(callSomethingRisky()) 它在哪里被优雅地处理?

Java 的相同问题。谢谢!

最佳答案

doSomethingRisky 中带有 throw e;try/catch 只做一件事:它破坏堆栈-跟踪信息。 可能 不是您想要的,因此应该删除 try/catch - 它已经冒泡了-符合预期。

关于信息,如果它只是throw;(而不是throw e;)那么它只是多余的,而不是破坏性的。

关于C# throw 语句多余?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17235159/

相关文章:

c# - while on IDataReader.Read 不适用于产量返回,但 foreach on reader 可以

java - 如何使用Gson删除Json对象的嵌套字段

java - Android 异步静态类?

java - Scanner 类的 nextInt() 方法不会在 while 循环中再次要求我输入?

javascript - 传递的 Json 不被 Controller 接受

c# - 如何根据作为 varchar 传递的 ids 列表获得结果?

java - NetBeans Web 服务客户端 stub - 类型不兼容?

Python 无法捕获重写的 NameError

java - 当用户 session 过期或返回 null 时抛出异常

c# - Mimekit/mailkit 下载邮件正文?