如何将数字捕获到InnerException C#

时间:2017-06-07 14:20:22

标签: c#

InnerException中的捕获数怎么可能? 我希望用这个数字排序我的错误异常。我喜欢像

这样的东西
catch (Exception e) when (e.Number == 1000)
{
    throw new ApplicationException("IP of database is wrong);
}

(附上picLinks以便更好地想象) https://ibb.co/dgnBav

修改

一般情况下,我希望通过一些特定数量的错误异常对排序进行排序,因此如果您知道如何获得此数字,那将是很好的解决方案

1 个答案:

答案 0 :(得分:1)

"连接请求超时"错误消息看起来像是由Oracle的.NET客户端库使用的:Oracle.DataAccess.Client.OracleException

我们可以使用as运算符来安全地检查Number属性:

using Oracle.DataAccess.Client;

...

catch( Exception ex ) when ( (ex.InnerException as OracleException)?.Number == 1000 )
{
    // stuff
}

使用静态帮助函数和C#7.0中引入的is-expression可以使这更具可读性:

private static Boolean CheckOracleException(Exception ex, Int32 oracleErrorNumber)
{
    if( ex.InnerException is OracleException oEx )
    {
        return oEx.Number == oracleErrorNumber;
    }
    else
    {
        return false;
    }
}

像这样使用:

catch( Exception ex ) when ( CheckOracleException( ex, 1000 ) )
{
    OracleException oEx = (OracleException )ex.InnerException;

    // do stuff
}