重新抛出异常

时间:2011-04-13 16:32:26

标签: c# exception

我看到很多代码如:

try
{
    // Some code
}
catch (Exception e)
{
    throw;
}

为什么有人需要捕获并重新抛出异常,而catch块中没有别的东西?

6 个答案:

答案 0 :(得分:3)

没有理由,除非您想在重新投掷之前抛出不同类型的异常或执行某些操作。

答案 1 :(得分:1)

可能需要此类代码以避免异常过滤器的奇怪影响。有关详细信息,请参阅http://www.pluralsight-training.net/community/blogs/keith/archive/2005/03/31/7149.aspx(Brian在Why catch and rethrow an exception in C#?帖子中找到的链接)。

短版本 - 可能有一些elses代码在异常抛出和catch块之间运行。因此,代码可能能够访问一些不可见的信息(例如,在文章的示例中允许在模拟上下文中运行第三方代码)。

这对于允许第三方插件的公共库和代码非常重要,通常不会引起应用程序开发人员的关注。

答案 2 :(得分:1)

我的猜测是它仅用于调试目的 - 开发人员可以在throw语句中设置断点,然后检查e中的内容。

答案 3 :(得分:0)

可能是该人想明确表示此段代码可能会抛出异常(作为一种文档),并且在将来可能希望以不同的方式处理异常,因此它们将构建现在的结构。

严格来说,它基本上什么都不做。

答案 4 :(得分:0)

通常,您会在开发过程中看到这样的结构,开发人员使用try-catch但尚未实现catch

答案 5 :(得分:0)

  

C#提供了一种非常简单的语法   提供所需的重新抛出   语义学一直以来,但似乎没有   很多人都知道。这离开了   我很困惑,因为它本质上是   C ++使用的语法相同:空   抛出声明。

http://winterdom.com/2002/09/rethrowingexceptionsinc