c# - 异常处理中的异常处理

标签 c# .net exception

异常处理中异常处理的最佳实践是什么?

我发现自己在现有的 C#(Framework 4.0)系统上工作,该系统在 catch 中使用自定义对象,并最终阻塞整个系统的大部分应用服务器层。

考虑此代码库中方法的以下片段版本:

    public void DoSomeStuff(string sGUID)
    {
        try
        {
            // Foo
        }
        catch (Exception oEx)
        {
            oExceptions.Add(oEx);

            if (oDBConn.NumberOfActiveTrans > 0)
            {
                oDBConn.Rollback();
            }
        }
        finally
        {
            oDBConn.DeleteLocksByGUID(sGUID);
        }
    }

我可能过于偏执了,但我发现自己非常担心这些可能发生的未处理异常。

因此,像以下更新版本这样的做法是否可以接受,或者是否有更好的方法来完成同样的事情?

    public void DoSomeStuff(string sGUID)
    {
        try
        {
            // Foo
        }
        catch (Exception oEx)
        {
            oExceptions.Add(oEx);

            try
            {
                if (oDBConn.NumberOfActiveTrans > 0)
                {
                    oDBConn.Rollback();
                }
            }
            catch (Exception oEEx)
            {
                oExceptions.Add(oEEx);
            }
        }
        finally
        {
            try
            {
                oDBConn.DeleteLocksByGUID(sGUID);
            }
            catch (Exception oFEx)
            {
                oExceptions.Add(oFEx);
            }
        }
    }

最佳答案

我个人不会在finally里面加一个try catch block ,那它就可以是一个无穷无尽的链条了。通常你不应该在 finally 中有复杂的东西,并且在任何情况下都应该在调用者中捕获意外异常。

编辑:仔细观察代码,我不明白为什么 finally 中的代码不应该在 try block 中。

关于c# - 异常处理中的异常处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36600610/

相关文章:

c# - 如何使用 c++/cli 在非托管代码中注册 c# 事件

c# - 单元测试中的依赖注入(inject),xUnit

c# - 尝试从 EF CodeFirst 更新对象时在多对多表中重复条目

java - Java中处理渲染异常?

java - 在 Java 中设置异常原因

c++ - bad_alloc 在初始化和填充 vector 时?

c# - 如何将 Expires Header 添加到 iis7 中的自定义文件?

c# - 在 ASP.Net 中编写重定向到 SSL 页面的最佳方法是什么

c# - 如何使用一个 Dockerfile 处理多个项目?

c# - .NET 导出到 excel - 不显示子行