带有catch子句的怪异行为

我面临一个带有catch子句过滤的怪异问题:

catch (System.Net.Http.HttpRequestException ex)
{
    ManagerHelper.Current.ExceptionHandler.Log($"random message", 
    log4net.Core.Level.Error, ex: ex);
    throw;
}
catch (ArgumentNullException ex)
{
    ManagerHelper.Current.ExceptionHandler.Log($"random message for null value", 
    log4net.Core.Level.Error, ex: ex);
    throw;
}
catch (Exception ex) when (!(ex is System.Net.Http.HttpRequestException) && !(ex is ArgumentNullException))
{
    ManagerHelper.Current.ExceptionHandler.Log($"random message for other exception", 
    log4net.Core.Level.Error, ex: ex);
    throw;
}
catch
{
    // My business treatment
}

实际上,当我抛出HttpRequestException时,预期的行为是进入特定错误的捕获,然后进入不带参数的捕获。由于未知原因,即使when子句结果为false,我也直接直接输入catch(ex ex),而不传递到catch(System.Net.Http.HttpRequestException ex)。

有人对此有解释吗?

预先感谢您的回复和/或建议。

评论