发布日期:2018-03-26
如何一次捕捉多个异常?+ 查看更多
如何一次捕捉多个异常?
+ 查看更多
发布日期:2018-02-23 16:00
分类:C#
浏览次数:125
只捕捉System.Exception是有难度的。但是,如果仅是已知的异常是可以被捕捉的。
现在的解决方法有时会导致不必要的重复的代码,例如:
现在的解决方法有时会导致不必要的重复的代码,例如:
try { WebId = new Guid(queryString["web"]); } catch (FormatException) { WebId = Guid.Empty; } catch (OverflowException) { WebId = Guid.Empty; }
我想,是否有一个方法能够只调用一次WebId = Guid.Empty来捕捉两个异常。
给的例子相当简单,因为它只是一个GUID(全局唯一标识符)。想象一下你多次修改一个对象的代码,如果其中一个操作在预料之中的失败了,你可以重置这个对象。但是,如果有一个意料之外的异常,我仍然想要把异常抛出。
关于回答:感谢每个人!由于某种原因,我想把我的想法设置在一个不支持GetType()交换的Switch-case语句上。现在,有两个答案,一个是使用“typeof”,另一个是使用“is”。我第一次认为我将使用typeof()函数,因为我想“我只是想抓住FormatException,因为这是我唯一期待的事情”。但是catch()不是那样起作用的:catch也捕捉所有的派生异常。在考虑之后,这是非常明显的。否则,catch(Exception ex)将无法起作用!所以正确的方法是使用“is”。仅是这一个问题就学到了两种东西。
回答:
catch (Exception ex) { if (ex is FormatException || ex is OverflowException) { WebId = Guid.Empty; return; } throw; }
捕捉System.Exception并交换类型