如何从函数中检查异常的类型?
本文关键字:异常 类型 检查 函数 | 更新日期: 2023-09-27 18:18:34
我有以下代码:
catch (ServiceException e) { se(e); return View("CreateEdit", vm); }
catch (Exception e) { ex(e); return View("CreateEdit", vm); }
return RedirectToAction("ShowSummary", new {
ds = vm.Meta.DataSourceID
});
protected void se(ServiceException e) {
ModelState.Merge(e.Errors);
}
protected void ex(Exception e) {
Trace.Write(e);
ModelState.AddModelError("", "Database access error: " + e.Message);
}
我想把它改成:
catch (Exception e) { processException(e); return View("CreateEdit", vm); }
是否有一种方法,我可以添加代码到一个processsexception函数,将能够检查它是什么类型的异常,然后根据它是否是ServiceException执行操作或者只是一个普遍的例外?我只是想把所有的异常处理放在一个地方然后命名为。
您可以像这样使用is
关键字
protected void processException(Exception e) {
if (e is XXXException)
{
this.doThis();
}
else if (e is YYYException)
{
this.doThat();
}
}
您也可以使用switch语句并测试e
的类型,但IMO is
更容易和更好
您可以使用typeOf(e)
或e.GetType()
,然后在其上执行switch或if语句。
当然,我们在数据库异常处理中广泛使用这种方法。
public void processException(Exception ex)
{
if (ex is System.Threading.ThreadAbortException)
{
// Do something
}
else if (ex is AnotherException)
{
// Do something else
}
}