如何对C#中的特定异常采取行动?

时间:2015-07-15 14:22:12

标签: c# exception exception-handling

我在C#中面临一个特殊的例外 - 例如 - "The underlying connection was closed: An unexpected error occurred on a receive."

如何确保仅在出现此异常时才会发生特定的更正任务例程?我一直在通过比较错误消息和预定义的字符串来解决问题。例如 -

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

但是,这似乎不是传统方式。任何指南都将非常感激。谢谢。

3 个答案:

答案 0 :(得分:5)

这是传统方式在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 
}

答案 1 :(得分:4)

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

try
{

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

答案 2 :(得分:1)

您可以将catch限制为异常子类型。 注意,如果由于某种原因无法处理捕获的异常,则应重新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.
}