C#如何捕获异常

时间:2016-02-29 17:14:50

标签: c#

我是C#编程的新手,我不明白这个问题。

using (WebClient wc = new WebClient())
{   
   try
   {
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        HtmlResult = wc.UploadString(URI, myParameters);
    }
    catch(AuthenticateExeption a)
    {
        throw new AuthenticateExeption("I can not connect to the server...");
    }
}

我正在尝试catch使用我的AuthenticateExeption,但代码永远不会转到throw new AuthenticateExeption("I can not connect to the server...");并始终在HtmlResult = wc.UploadString(URI, myParameters);行上编程。

为什么?

2 个答案:

答案 0 :(得分:0)

您正在捕获Auth Exception,然后重新抛出它的新版本......

想得更像......

using (WebClient wc = new WebClient())
{   
   try
   {
        wc.Headers[HttpRequestHeader.ContentType] = "application/x-www-form-urlencoded";
        HtmlResult = wc.UploadString(URI, myParameters);
        if (some failed condition)
        {
           // I don't know what actually throws this, this is just for sim purposes
           throw new AuthenticateExeption("I can not connect");
        }
    }
    catch(AuthenticateExeption a)
    {
        // Handle the exception
        Log(a.Message) // etc....
    }
    catch(Exception e)
    {
        // Handle all other exceptions
    }
}

从这一点开始,如果您真的想要抛出相同的异常,那么您应首先捕获它,处理它,然后重新抛出它以获得外部try / catch以进一步处理。

答案 1 :(得分:0)

您可能会遇到其他类型的例外情况。如果您将catch(AuthenticationException a)替换为catch(Exception ex)并在该行上添加断点,则可以观看ex以查看正在发生的异常类型。

或者,因为.Net将首先捕获最具体的异常(即大多数派生类型),因此您可以保留当前的catch块并在其下添加一个catch(Exception ex)块,以便{{1}发生它会被捕获,但所有其他异常将落到更一般的情况。