有一些帖子询问这两者之间的区别是什么。 (为什么我还要提这个……)
但是我的问题在某种程度上是不同的,我在另一种类似错误 的上帝般的 处理方法中称其为“throw ex”。
public class Program { public static void Main(string[] args) { try { // something } catch (Exception ex) { HandleException(ex); } } private static void HandleException(Exception ex) { if (ex is ThreadAbortException) { // ignore then, return; } if (ex is ArgumentOutOfRangeException) { // Log then, throw ex; } if (ex is InvalidOperationException) { // Show message then, throw ex; } // and so on. } }
如果try & catch在中使用Main,那么我将使用throw;重新抛出错误。但是在上面的简化代码中,所有异常都会通过HandleException
try & catch
Main
throw;
HandleException
内部调用时是否throw ex;与调用具有相同的效果?throw``HandleException
throw ex;
throw``HandleException
是,有一点不同;
throw ex
throw不会 - 原始罪犯将被保留。
throw
static void Main(string[] args)
{ try { Method2(); } catch (Exception ex) { Console.Write(ex.StackTrace.ToString()); Console.ReadKey(); } }
private static void Method2() { try { Method1(); } catch (Exception ex) { //throw ex resets the stack trace Coming from Method 1 and propogates it to the caller(Main) throw ex; } }
private static void Method1() { try { throw new Exception(“Inside Method1”); } catch (Exception) { throw; } }