在try catch中抛出自定义异常

ric*_*cki 3 c# exception-handling exception

如果我在一个大的try catch中有一些代码最终会捕获一个OracleException和一个将军Exception然后我不能在try catch中抛出任何自定义异常,因为它被一般的抓住了Exception.

在这种情况下我该怎么做?

谢谢

try
{
    // some code
    if(a==b)
    {
        throw new MyCustomException(ex);
    }
}
catch(OracleException ex)
{
    ...
}
catch(Exception ex)
{
    ...
}
Run Code Online (Sandbox Code Playgroud)

Jus*_*tin 5

你的意思是你想抛出一个未被 catch-call Exception块捕获的自定义异常?

如果是这种情况,那么试试这个:

try
{
    throw new MyCustomException();
}
catch (OracleException ex)
{
    // Handle me...
}
catch (MyCustomException)
{
    // Important: NOT `throw ex` (to preserve the stach trace)
    throw;
}
catch (Exception ex)
{
    // Handle me...
}
Run Code Online (Sandbox Code Playgroud)

类型的任何异常都MyCustomException将被第二个catch(而不是第三个catch)捕获,然后重新抛出.

请注意,这通常是不好的做法catch (Exception)- 这是一个很好的例子.我绝对建议你不要再进行上述操作,而只是进行重构,这样你就不再能够捕捉到Exception,这将是一个更为简洁的解决方案.