InnerException中的捕获数怎么可能? 我希望用这个数字排序我的错误异常。我喜欢像
这样的东西catch (Exception e) when (e.Number == 1000)
{
throw new ApplicationException("IP of database is wrong);
}
(附上picLinks以便更好地想象) https://ibb.co/dgnBav
修改
一般情况下,我希望通过一些特定数量的错误异常对排序进行排序,因此如果您知道如何获得此数字,那将是很好的解决方案
答案 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
}