首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异常处理中的异常处理

异常处理中的异常处理
EN

Stack Overflow用户
提问于 2016-04-13 13:54:00
回答 3查看 155关注 0票数 3

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

我发现自己正在开发一个现有的C# (Framework4.0)系统,该系统在catch中使用自定义对象,并最终阻塞整个系统的大多数Application层。

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

代码语言:javascript
复制
    public void DoSomeStuff(string sGUID)
    {
        try
        {
            // Foo
        }
        catch (Exception oEx)
        {
            oExceptions.Add(oEx);

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

我可能过于偏执,但我发现自己非常担心可能出现的未处理的例外情况,这些可能发生。

因此,像下面的更新版本是一种可以接受的做法,还是有更好的方法来完成同样的事情?

代码语言:javascript
复制
    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);
            }
        }
    }
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-04-13 13:57:44

我个人不会在try catch中添加一个finally块,这样它就可以成为一个无穷无尽的链。通常,您不应该在finally中包含复杂的内容,而且在任何情况下,调用方都应该捕捉到意外的异常。

编辑:仔细看一下代码,我不明白为什么最终的代码不应该在try块中。

票数 4
EN

Stack Overflow用户

发布于 2016-04-13 14:01:54

我可能过于偏执,但我发现自己非常担心可能出现的未处理的例外情况,这些可能发生。

别惊慌。如果db层中有错误,尝试在那里捕获它。

票数 0
EN

Stack Overflow用户

发布于 2016-04-13 18:14:26

原始代码中最危险的事情是,如果失败而事务回滚失败,唯一重新抛出的错误将是回滚事务的错误。您将永远不知道导致您不得不回滚事务的原始异常是什么。这可能是你最关心的。

如果您想疑神疑鬼,请记录事务回滚失败。但重要的是之前的例外让你到了那个地步。应该根据调用者的期望记录或重新抛出。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36600610

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档