【问题标题】:C# How do i resume the execution of my code after a catch?C# 如何在捕获后恢复执行我的代码?
【发布时间】:2018-10-12 09:24:24
【问题描述】:

即使我抛出异常,在第一次捕获后是否可以继续执行我的程序?

我做了一个示例程序,但是我将异常添加到我的List<string> 的行必须在内部和外部 foreach 之后执行我知道如果我不这样做是可能的抛出异常,但我也必须这样做。

foreach(var x in x)
{
    try
    {
        List<string> exs = new List<string>();
        foreach(var a in b)
        {
            try
            {
                //...some code
            }
            catch(Exception ex)
            {
                throw ex;
            }
            finally
            {
                //...some code
            }
        }
        exs.Add(ex);
    }
    catch(Exception ex)
    {
        Console.WriteLine(ex);
    }
    finally
    {
        //...some code
    }
}

【问题讨论】:

  • 请注意throw ex 重置堆栈轨道,使用throw 保留真正引发异常的信息。
  • 所以你想继续执行内循环?
  • 很多无法编译的伪代码。为什么您不提供我们可以复制和粘贴而无需修复与您的问题无关的编译器错误的代码?例如:foreach(var x in x)exs.Add(ex)(ex是例外)
  • 代码有错误,除此之外还不清楚您要实现什么。应该抛出哪些异常,应该由谁来处理它们,列表最后应该包含什么?

标签: c# exception try-catch execute throw


【解决方案1】:

不要扔掉,稍后收集并打印。

List<Exception> exs = new List<Exception>();
try
{

    foreach(var a in b)
    {
        try
        {
            //...some code
        }
        catch(Exception ex)
        {
            exs.Add(ex);
        }
        finally
        {
            //...some code
        }
    }        
}    
catch(Exception e)
{
   Console.WriteLine(e.ToString());
}
finally
{
    //...some code
}
exs.ForEach(ex=> Console.WriteLine(ex.ToString()));

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-03-01
    • 1970-01-01
    • 2018-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-01-28
    • 1970-01-01
    相关资源
    最近更新 更多