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

c# – 应该使用多个catch块还是捕获基类Exception并使用is关键字

发布时间:2020-12-16 02:01:10 所属栏目:百科 来源:网络整理
导读:我正在做一个大学项目,并做了一个有异常处理的有趣行动. 我在try {} catch {}块中有一段代码.它可以抛出两种类型的异常,每种异常应该以不同的方式处理. 甚至没有想到它,我写了这样的代码: try{ SomeAction();}catch(Exception _Ex){ if(_Ex is NullReferenc
我正在做一个大学项目,并做了一个有异常处理的有趣行动.

我在try {} catch {}块中有一段代码.它可以抛出两种类型的异常,每种异常应该以不同的方式处理.

甚至没有想到它,我写了这样的代码:

try
{
    SomeAction();
}
catch(Exception _Ex)
{
    if(_Ex is NullReferenceException) 
    {
        DoSomething();
    }
    else if(_Ex is ArgumentOutOfRangeException) 
    {
        DoSomethingElse();
    }
}

Hovewer我的教授说这是一种奇怪的方法,并且问我为什么不使用这种结构:

try
{
    SomeAction();
}
catch(NullReferenceException _Ex)
{
    DoSomething();
}
catch(ArgumentOutOfRangeException _Ex)
{
    DoSomethingElse();
}

我不能不同意他这种方式也是有效的 – 甚至比我的方式更简单.所有这些让我思考 – 两种解决方案都是正确的,并做同样的事情.
如果是这样,哪一个应该被用作更好的做法?

我个人认为使用的方法更好一点,因为它允许程序员通常处理异常情况,并且AFTER单独处理每个异常导数.除此之外,我喜欢它看起来更“语法上更好”的方式.

另一方面,多重捕获版本是它应该根据C#参考(http://msdn.microsoft.com/pl-pl/library/0yd65esw.aspx)工作的方式.

你认为这两种方法都是可以接受的,还是应该只使用其中一种?
如果是这样,哪一个“赢”?

我知道这不是地球上最重要的问题,但它让我很好奇.

解决方法

你的教授是对的.理想情况下,您应该只捕获您感兴趣的例外情况.

第一种方法的缺点是,它会捕获所有意外的异常,称为ArgumentNullException.在这种情况下,理想情况下应用程序应该与未处理的异常崩溃.如果要记录信息,则应在记录后重新抛出所有其他异常.

此代码与您的教授建议的内容相同:

catch(Exception _Ex)
{
    if(_Ex is NullReferenceException) 
    {
        DoSomething();
    }
    else if(_Ex is ArgumentOutOfRangeException) 
    {
        DoSomethingElse();
    }
    throw;
}

(编辑:李大同)

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

    推荐文章
      热点阅读