如何正确处理异常

时间:2011-04-20 11:47:01

标签: c# exception exception-handling

我有一个xmlbuilder实用程序类,它调用几个方法来构建一个xml文件

       public XMLBuilder(String searchVal)
        {
            this.searchVal = searchVal;

            try
            {
                getData();
                returnedData = processDataInToOriginalFormat();
                WriteBasicTemplate();
            }
            catch (WebException)
            {
                //If this is thrown then there was an error processing the HTTP request for MSO data.
                //In this case then i should avoid writing the xml for concordance.
                serviceAvailable = false;
                MessageBox.Show("Could not connect to the required Service.");

            }
            catch (NoDataFoundException ndfe)
            {
                //propegate this back up the chain to the calling class
                throw;
            }

processDataInToOriginalFormat();这是一个类中的方法,如果服务不可用则导致异常,并且我已将异常传播回此处理。我打算尝试设置一个布尔标志来指示是否要写一些xml。如果标志为false,则不要写它。

我忘记了异常停止程序流程,现在我意识到这是不可能的,好像发生了异常,其余的代码都没有恢复。我怎么能绕过这个?只需将WriteBasicTemplate();调用添加到我的catch子句中吗?

由于

1 个答案:

答案 0 :(得分:0)

你的代码的逻辑有点令人困惑,因为“serviceAvailable = false”会做什么并不明显,所以很难给出详细的提示。如果您真的知道如何处理它们以及如何解决问题,那么处理(而不是重新抛出)它们的一般规则就是处理它们。我不知道,或者程序将处于无法继续工作的状态,让异常通过并让程序崩溃。

在你的情况下,我可能会构造这样的代码:

        try
        {
            returnedData = processDataInToOriginalFormat();
            // put code here which should only be executed in
            // case of no exception
        }
        catch (WebException)
        {
            // do what ever is required to handel the problem
            MessageBox.Show("Could not connect to the required Service.");
        }
        // code which should be executed in every case
        WriteBasicTemplate();

你也应该看看“终于” - 块。根据您的要求,您应该在这样的块中使用WriteBasicTemplate。但在你的情况下,我可能不会这样做。它更适用于资源清理或类似的东西。