加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 我可以组合try catch块吗?

发布时间:2020-12-16 01:49:58 所属栏目:百科 来源:网络整理
导读:我有以下代码: public IDictionarystring,string GetNextBase36(string partitionKey,string rowKey,ref string seq) { Sequence sequence; try { sequence = _sequenceRepository.Get(u = u.PartitionKey == partitionKey u.RowKey == rowKey); } catch {
我有以下代码:

public IDictionary<string,string> GetNextBase36(string partitionKey,string rowKey,ref string seq)
    {
        Sequence sequence;
        try {
            sequence = _sequenceRepository.Get(u => u.PartitionKey == partitionKey & u.RowKey == rowKey);
        } catch {
            _errors.Add("","Database error: Get sequence failed");
        }
        try {
            sequence.Value = Base36.Encode(Base36.Decode(sequence.Value) + 1);
            _sequenceRepository.AddOrUpdate(sequence);
            seq = sequence.Value;
        } catch {
            _errors.Add("","Database error: Updating sequence failed");
        }
        return _errors;
    }

它有效,但让try catch块包围每个数据库访问似乎有点过分.有什么方法可以简化这个吗?有没有更好的方法?

根据帮助/建议更新了代码:

public IDictionary<string,ref string seq)
    {
        Sequence sequence;
        string catchMsg = string.Empty;
        try {
            catchMsg = "Database error: Get sequence failed"
            sequence = _sequenceRepository.Get(u => u.PartitionKey == partitionKey & u.RowKey == rowKey);
            sequence.Value = Base36.Encode(Base36.Decode(sequence.Value) + 1);
            catchMsg = "Database error: Updating sequence failed"
            _sequenceRepository.AddOrUpdate(sequence);
            seq = sequence.Value;
        } catch {
            _errors.Add("",catchMsg);
        }
        return _errors;
    }

解决方法

您正在牺牲错误消息可读性的祭坛上的确切异常堆栈跟踪(更不用说代码可读性).

考虑您的受众:开发人员.开发人员应该能够读取异常堆栈跟踪,这是一个比短错误消息更有价值的调试信息.

因此,我的建议是只放入一个异常处理程序,用于记录层次结构中较高的位置.如果必须在当前方法中使用一个,至少捕获完整的异常堆栈跟踪.

此外 – 在第一个例外之后继续下去真的有意义吗?如果检索序列失败,则在下一个try块中使用它的值将不再公平.这里有多个try / catch块是没有意义的,除非你确切知道如何在每个catch处理程序中解决问题,这样你就可以继续了.

更新:

现在你有了一个try / catch块代码,可读性得到了提高.你基本上把一个错误列表返回给调用者看起来仍然很奇怪 – 错误情况应该是例外的,所以它不应该渗透到你的方法的业务逻辑中,而是我只是让异常进入堆栈直到你可以真正处理问题(或只是记录它并退出应用程序).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读