C#throw语句多余?

Bog*_*dru 2 c# java exception-handling

我有一个看起来像这样的代码(抱歉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);
        }
   }
}
Run Code Online (Sandbox Code Playgroud)

基本上,SomeClass将是一个库,我想设计它,以便所有异常将由调用程序处理(谁可能会或可能不会选择显示有关异常的消息).

我的问题是关于try/catch&throwdoSomethingRisky()from中的使用SomeClass.这是多余的还是有必要的?我的意思是,如果我将其关闭并且该函数在运行时遇到异常,它是否会使程序崩溃,因为没有捕获THAT函数内部的异常,或者它是否仍然将它传递给调用者(callSomethingRisky()),在那里它被优雅地处理?

Java的相同问题.谢谢!

Mar*_*ell 17

try/ catchthrow e;doSomethingRisky不正是一两件事:它破坏了堆栈跟踪信息.这可能不是你想要的,所以try/ catch应该被删除 - 它已经按预期冒出来了.

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