C# 捕获异常后是否继续程序?

C# 捕获异常后是否继续程序?,c#,exception,C#,Exception,我知道这个问题也经常被问到,但我看不出他们能找到一个我满意的答案。我想从一开始就学会这一点 string[]list={“foo”,“bar”,“foo”}; 对于(int i=0;i您的示例是如何处理它,尽管您可能希望只捕获特定的异常,而不是所有异常。在某些情况下,您可能希望由于特定的异常而退出处理-例如,如果您的数据库无法访问,则无需继续检查所有文件,只会发现它在每次迭代中失败 在该示例中,您可以将循环嵌套在try-catch中,这样它也可以捕获抛出的异常类型,您特别希望这些异常类型是循环处

我知道这个问题也经常被问到,但我看不出他们能找到一个我满意的答案。我想从一开始就学会这一点

string[]list={“foo”,“bar”,“foo”};

对于(int i=0;i您的示例是如何处理它,尽管您可能希望只捕获特定的异常,而不是所有异常。在某些情况下,您可能希望由于特定的异常而退出处理-例如,如果您的数据库无法访问,则无需继续检查所有文件,只会发现它在每次迭代中失败

在该示例中,您可以将循环嵌套在try-catch中,这样它也可以捕获抛出的异常类型,您特别希望这些异常类型是循环处理的终端。下面显示了嵌套该循环的示例

try
{
    for(int i=0; i < 100; i++)
    {
        try
        {
            //do something
        }
        catch(IOException ex)
        {
        }
    }
}
catch(SecurityException sex)
{
}
试试看
{
对于(int i=0;i<100;i++)
{
尝试
{
//做点什么
}
捕获(IOEX异常)
{
}
}
}
捕获(安全例外性)
{
}

顺便说一句,你也可以考虑你可以批处理数据库(取决于你可能处理多少文件),并将你的更改一次进行。这是一个你想考虑的性能折衷。

< P>根据需求,你可以将数据处理和错误处理分开:

  • 遍历这些文件
  • 在异常捕获的情况下,将足够的信息放入一个列表中,字典可以稍后处理
  • 在循环通过所有对象后,循环通过错误
例如:

string[] list = {"foo", "bar", "foo"};
var errors = new Dictionary<string, ExceptionDispatchInfo>();
for(int i = 0; i < list.Length; i++)
{
    try
    {
        if(!list[i].Equals("foo"))
            throw new Exception("foo exception");
        else
            Console.WriteLine(list[i]);
    }
    catch(Exception ex)
    {
       var edi = ExceptionDispatchInfo.Capture(ex);
       errors.Add($"{list[i]}_{i}", edi);
    }
    Console.WriteLine("Next record");
}

foreach(var error in errors)
{
    //Process error and throw the original exception if needed
    //error.Value.Throw();
} 
string[]list={“foo”,“bar”,“foo”};
var errors=newdictionary();
for(int i=0;i
您做得很好:)在编写希望捕获IOException的代码时,请使用“catch(IOException ex){}。对于异常,没有一刀切的方法,因为异常可能出于不同的原因出现。Eric Lippert想出了一种完美的方法,非常感谢!我从来没有像我一直认为的那样,当程序进入“陷阱”时,理解异常的全部潜力“块,它应该终止。但这为我打开了一个全新的世界。我已经用具体的答案编辑了这篇文章。非常感谢!:)我能给出的最好建议是尽可能避免异常(在读取文件之前检查文件是否存在)@bradbury9是的,我同意。在我的情况下,我将从一个文件夹中检索所有文件(因此在这种情况下,我必须检查文件夹是否存在-我还没有这样做,谢谢!)您是否认为有必要将事务放入自己的try-catch块中。回滚到它自己的try-catch块?感谢关于“如果db连接关闭,则无需检查所有文件”的提示。这是一个很好的观点!