c# – 应该使用多个catch块还是捕获基类Exception并使用is关键字
我正在做一个大学项目,并做了一个有异常处理的有趣行动.
我在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; } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |