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

时间:2011-12-20 03:55:31

标签: c#

我有以下代码:

        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来执行操作 或只是一般的例外?我只是想将所有异常处理放在一个地方 然后打电话给它。

3 个答案:

答案 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
   }
}