可以向上抛出异常

dea*_*vmc 4 c# exception-handling windows-phone-7

我正在研究这两种方法.一个节省一个负载.显然两者都需要某种错误处理,所以我实现了一些"捕获所有处理".现在,搜索的脚跟是,接下来发生的事情是在运行时,错误发生的位置.因此,我想处理调用者中的错误,一级以上.这样我可以针对不同情况使用不同的逻辑.

一个例子是.如果我在第一次运行时检查负载并且它失败了,我可以假设他们的内存可能已被清除.但是如果我在执行期间尝试加载,我可以假设内存没有被清除(通过正确的方式)并且必须启动某些内容.

    public void SaveToStorage(AccountCollection Collection)
    {
        try
        {
            var storage = IsolatedStorageSettings.ApplicationSettings;
            storage["defaultCollection"] = Collection;
            storage.Save();
        }
        catch (Exception ex)
        {
            // Do something meaningful here
        }
    }

    public AccountCollection LoadFromStorage()
    {
        try
        {
            AccountCollection collection;
            var storage = IsolatedStorageSettings.ApplicationSettings;
            storage.TryGetValue("defaultCollection", out collection);
            return collection;
        }
        catch (Exception ex)
        {
          // Do something meaningful here
        }

        return null;
    }
Run Code Online (Sandbox Code Playgroud)

基本上我问我可以将错误提交给调用者但仍保留原始错误详细信息.

编辑:约翰和安德鲁都给出了正确的答案.安德鲁将得到绿色标记,因为我想在原始类中做一些其他通用清理.

And*_*ell 11

对于所有关于不捕获的负面评论,他表示他希望在抛出异常的方法中进行一些展开,但也要继续向上堆栈,以便其他方法可以执行某些操作.他没有抓住异常只是为了再次抛出它,他想要执行一些动作,然后再次抛出它.

catch (Exception ex)
{
    // Do something
    throw;
}
Run Code Online (Sandbox Code Playgroud)

编辑

出于某种原因,我将其视为C++,因此删除了有关复制异常的评论.

  • `throw`自己保留所有信息,包括堆栈跟踪.我很确定(但不是100%)`throw ex`会抛出异常,但是你丢失了堆栈信息. (8认同)

Joh*_*ers 6

如果你没有捕获异常,它将向上传播.

这就是它的工作原理.不要在任何地方放置try/catch块.只将它们放在您要实际处理异常的位置.