在加载和显示数据之间处理异常

时间:2015-05-22 22:04:01

标签: c# exception-handling

我有这种情况不确定如何最好地处理这个问题。输入将不胜感激。想象一下我有这样的方法:

void loaddata()
{
    try
    {
        // EXTRA: I also want to skip below SaveSomething if there was exeption
        // last time I called DecryptAndloadXMLdata. This may happen
        // if user calls loaddata twice. This is exaclty similar situation
        // as app quitting just it happens is user calls loaddata twice
        // and during first call there was exception say with DecryptAndloadXMLdata
        Savesomething(listOfObjects, xmlPath);//save old data first
        xmlPath = newValue;

        // some operations

        xmlDoc = DecryptAndloadXMLdata(xmlPath);

        // some other operations- populate List with data from above XML file
        listOfObjects.Add(objectFromXML);
        // Here also possibly modify contents of listOfObjects elements
    }
    catch(Exception ex)
    {
        xlmPath="";
    }
}

现在问题是应用程序退出时我有这样的功能 自动保存上面填充的List对象 文件的方法。像:

void whenAppisQuitting()
{
    Savesomething(listOfObjects, xmlPath);
}

但问题是。想象一下xmlDoc = loadXMLdata();抛出上面的方法。会发生什么是我提到的列表不会被填充,当应用程序退出空元素(例如空listOfObjects)将写入xmlPath - 从而损坏我的原始文件,因为没有相关例外情况是由于loadXMLData方法中的加密。

我希望我的问题清楚明了。处理这种情况的方法是什么?例如我所做的你可以看到我在xmlPath中将catch设置为空 - 因此,如果有任何异常我认为数据未成功加载 - 因此现在在应用程序退出时我可以保持冷静,因为没有什么会写入文件,因为它是xmlPath =""。这是解决这个问题的合理方法吗?

有点困惑,因为这种问题现在将错误处理提升到不同的水平 - 我需要考虑所有可能的失败?

2 个答案:

答案 0 :(得分:1)

  

处理此类情况的方法是什么?

我会设置一个标志,指示解析时出错。将路径设置为string.Empty会导致混淆(IMO)。也许一个空字符串可能是传递给您的方法的可能值。

catch(Exception ex)
{
    // Log
    IsParsingSuccessful = false;
}

当你想写时,看看那面旗帜:

void AppIsQuitting()
{
    if (IsParsingSuccessful)
    {
        SaveSomething(listOfObjects, xmlPath);
    }
}

答案 1 :(得分:0)

作为一般指导,您可能永远不应在没有用户明确意图的情况下覆盖文件。

至于您的错误处理,请使用简单的标志/布尔值来指示有效行为。仅在处理完所有内容后将该标志设置为true,并且仅当该标志为真时,将内容保存到文件中。