如何在c#中处理特定的异常

本文关键字:异常 处理 | 更新日期: 2023-09-27 18:02:55

我在c#中遇到了一个特殊的异常,例如——"The underlying connection was closed: An unexpected error occurred on a receive."

如何确保只在出现此异常时执行特定的纠正任务例程?我一直在使用通过将错误消息与预定义字符串进行比较的解决方案。例如-

    catch(Exception e)
    {
        if(e.Message=="...")
        {  
            //correction routine
        }
    }

但是,这似乎不是传统的方法。任何指导都将非常感激。谢谢你。

如何在c#中处理特定的异常

这是c# 6.0之前的常规方法(除了可能捕获更具体的异常类型)。在c# 6.0中,你可以添加异常过滤器:

catch (Exception ex) if (ex.Message.Contains("The underlying connection was closed"))
{
    //correction routine 
}
然而,可能有比检查消息更安全的方法。看看ErrorCode,看看你是否不能过滤它(因为它不受培养的影响)。
catch (Exception ex) if (ex.ErrorCode == 1234)
{
    //correction routine 
}

您可以使用异常的实际类型链接在一起:

try
{
}
catch(SpecificExceptionType e) //System.Net.WebException in your case, I think
{
    //Specific exception
}
catch(Exception e)
{
    //Everything else
}

可以将捕获限制为异常子类型。注意,如果你不能处理捕获的异常,无论什么原因,你应该重新- throw它。

...
catch (SqlException sex)
{
    if(sex.Message == 
        "The underlying connection was closed: An unexpected error occurred on a receive.")
    {
        // Handle the exception.
    }
    else
    {
        throw
    }
}

如果使用c# 6.0或更高版本,可以将条件与catch结合使用。

...
catch (SqlException sex)
    if (sex.Message ==
        "The underlying connection was closed: An unexpected error occurred on a receive.")
{
    // Handle the exception.
}