在.NET中,try/catch是否有任何优势,其中catch只是重新抛出

Jus*_*ing 6 .net c# try-catch

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

我有时会遇到如下所示的C#代码:

        try
        {
            // Some stuff
        }
        catch (Exception e)
        {
            throw e;
        }
Run Code Online (Sandbox Code Playgroud)

我理解它可以做一些事情,比如记录异常消息,然后重新抛出它.我在谈论只能重新抛出异常的问题.我没有看到这一点.我有三个问题:

1)这有什么好处

2)这根本不会使代码变得缓慢

3)如果捕获块如下,它会有什么不同:

        catch (Exception)
        {
            throw;
        }
Run Code Online (Sandbox Code Playgroud)

And*_*are 20

这会重新抛出完全相同的异常:

    catch (Exception)
    {
        throw;
    }
Run Code Online (Sandbox Code Playgroud)

而这会在没有原始堆栈跟踪的情况下重新抛出异常:

    catch (Exception e)
    {
        throw e;
    }
Run Code Online (Sandbox Code Playgroud)

throw;由于您可以在重新抛出异常之前记录异常或执行其他操作,因此通常有充分的理由.我不知道有什么好的理由,throw e;因为你会消除有价值的堆栈跟踪信息.

  • 后者应该几乎不会被使用,尽管有人可能会认为前者不应该用在你所呈现的化身中(不添加至少某种形式的日志记录). (2认同)