我有一个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子句中吗?
由于
答案 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。但在你的情况下,我可能不会这样做。它更适用于资源清理或类似的东西。