如何从函数中检查异常的类型?

本文关键字:异常 类型 检查 函数 | 更新日期: 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
   }
}