什么“扔”;靠自己呢?

时间:2010-04-28 10:33:26

标签: c# .net exception

  

可能重复:
  difference between throw and throw new Exception()

有什么意义

catch (Exception)
{
    throw;
}

这是做什么的?

5 个答案:

答案 0 :(得分:96)

throw关键字本身只会重新引发上面catch语句捕获的异常。如果你想做一些基本的异常处理(也许是回滚事务的补偿操作)然后重新抛出调用方法的异常,这很方便。

与捕获变量中的异常并抛出该实例相比,此方法有一个明显的优势:它保留了原始调用堆栈。如果你捕获(Exception ex)然后抛出ex,你的调用堆栈将只从那个throw语句开始,你就会丢失原始错误的方法/行。

答案 1 :(得分:12)

有时您可能想要这样做:

try
{
    // do some stuff that could cause SomeCustomException to happen, as 
    // well as other exceptions
}
catch (SomeCustomException)
{
    // this is here so we don't double wrap the exception, since
    // we know the exception is already SomeCustomException
    throw;
}
catch (Exception e)
{
    // we got some other exception, but we want all exceptions
    // thrown from this method to be SomeCustomException, so we wrap
    // it
    throw new SomeCustomException("An error occurred saving the widget", e);
}

答案 2 :(得分:3)

它重新抛出完全相同的错误,你没有得到任何东西。
有时您可以使用catch方法进行一些日志记录或其他事情,而不会像这样填写您的异常:

catch (Exception) {
  myLogger.Log(LogLevels.Exception, "oh noes!")
  throw; 
}

我最初误以为这会放松你的筹码,但这只会是你要做的事情:

catch (Exception err) {
  throw err; 
}

答案 3 :(得分:3)

我能想到的唯一理由是你是否想在调试过程中设置一个断点 它也是我认为的一些工具生成的默认代码。

答案 4 :(得分:2)

只需重新抛出当前异常,该异常将保持其“源”和堆栈跟踪。