我有以下代码:
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); }
有没有办法可以将代码添加到能够执行的processException函数中 检查它是什么类型的异常,然后根据它是否是ServiceException来执行操作 或只是一般的例外?我只是想将所有异常处理放在一个地方 然后打电话给它。
答案 0 :(得分:4)
您可以像这样使用is
关键字
protected void processException(Exception e) {
if (e is XXXException)
{
this.doThis();
}
else if (e is YYYException)
{
this.doThat();
}
}
你也可以使用switch语句测试e
的类型,但IMO is
更容易,更好
答案 1 :(得分:1)
您可以使用typeOf(e)
或e.GetType()
,然后对其执行切换或if语句。
答案 2 :(得分:1)
当然,我们在数据库异常处理中广泛使用它。
public void processException(Exception ex)
{
if (ex is System.Threading.ThreadAbortException)
{
// Do something
}
else if (ex is AnotherException)
{
// Do something else
}
}