抛出异常后继续循环迭代

Dim*_*nev 10 .net c# exception-handling exception

假设我有这样的代码:

try
{
    for (int i = 0; i < 10; i++)
    {
        if (i == 2 || i == 4)
        {
            throw new Exception("Test " + i);
        }
    }
}
catch (Exception ex)
{
    errorLog.AppendLine(ex.Message);
}
Run Code Online (Sandbox Code Playgroud)

现在,显然执行将停止i==2,但我想让它完成整个迭代,以便在errorLog有两个条目(for i==2i==4)所以,是否有可能继续迭代甚至抛出异常?

Ser*_*rvy 45

只需改变catch循环内部的范围,而不是在其外部:

for (int i = 0; i < 10; i++)
{
    try
    {
        if (i == 2 || i == 4)
        {
            throw new Exception("Test " + i);
        }
    }
    catch (Exception ex)
    {
        errorLog.AppendLine(ex.Message);
    }
}
Run Code Online (Sandbox Code Playgroud)


Ken*_*eth 6

为什么要抛出异常呢?您可以立即写入日志:

for (int i = 0; i < 10; i++)
{
    if (i == 2 || i == 4)
    {
        errorLog.AppendLine(ex.Message);
        continue;
    }
}
Run Code Online (Sandbox Code Playgroud)

  • 我不相信他的实际用例非常简单.据推测,这仅仅是用于演示控制流量要求的示例代码. (4认同)
  • @Kenneth不,它根本不会改变这个问题.问题是,"是否有可能继续迭代甚至抛出异常?".代码只是一个例子,但问题是要求一般情况,而不仅仅是针对那个确切的代码片段.即使查看代码,也很清楚它仅用于演示目的.如果是他正在使用的*实际*代码,我会告诉他不要使用循环,而是用`errorLog.AppendLine("Test 2 \nTest4")替换整个块;`但是我知道这不是他的*真实*代码我不会把它放在答案中. (2认同)