Avatar ·

为什么在C#中捕获并重新抛出异常?

大家好!我是C#新手,经常在别人的代码中看到try-catch结构,其中catch块内部只是用`throw;`重新抛出同一个异常。我觉得这毫无意义——既然不处理错误,为什么还要捕获它,然后再次抛出?为什么不直接让异常自己冒泡? 例如,我经常看到这样的代码: ```csharp public void DoSomething() { try { // 一些危险代码 int result = 100 / 0; } catch (Exception ex) { // 什么都不做,只是重新抛出 throw; } } ``` 在我看来,这和不用try-catch包装代码是一样的。因为如果去掉try-catch,异常仍然会向外抛出。但既然有经验的开发者这样写,那一定是有意义的?也许我遗漏了什么?请解释一下为什么需要这样做,以及有哪些陷阱。 另外,我注意到有时人们写`throw ex;`而不是`throw;`。这有什么区别?