什么“扔”本身呢?

可能重复:
抛出和抛出新的exception()

什么是刚才有点

catch (Exception) { throw; } 

这是做什么的?

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

这个方法比捕获variables中的exception并抛出该实例具有一个显着的优点:它保留了原来的调用堆栈。 如果你捕获(Exception ex)然后抛出ex,那么你的调用堆栈只会从throw语句开始,而你失去原始错误的方法/行。

有时你可能想要做这样的事情:

 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); } 

只有我能想到的原因是如果你想在debugging过程中放置​​一个断点。
这也是我认为由一些工具生成的默认代码。

它重新抛出同样的错误,你没有得到什么。
有时你可以使用catch方法来做一些日志logging或者其他事情,而不需要像下面这样调用exception:

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

我最初错误地认为这会放松你的堆栈,但这只会是如果你会做到以下几点:

 catch (Exception err) { throw err; } 

简单地重新抛出当前的exception,那个exception将保留它的“源”和堆栈跟踪。