在循环中何处捕获异常?

时间:2010-08-11 17:23:09

标签: c# exception-handling

HI, 我想知道你对异常处理的想法是什么,即我有一个方法:

public void Method{}
{
   for (int i=0;i < length )
   {
    // dosomething that may case exception
    ...
    ...
    // rest of the code
   }
}

我应该为整个循环添加try catch块以进行异常处理,还是只添加最有价值的代码或其他东西? 什么是最佳做法?

6 个答案:

答案 0 :(得分:9)

答案是你想要/可以处理它的级别。如果一个元素的处理失败但你可以继续处理,那么使用try catch inside循环。如果错误可能发生并且您无法继续,则使用外部try catch。

答案 1 :(得分:2)

这取决于您希望代码流动的方式

例如,即使一个元素抛出异常,循环仍会继续执行吗?如果是这样,那么你希望你的try / catch在for中。如果没有,那么你想要你的try / catch围绕for。

答案 2 :(得分:1)

这取决于。

如果在任何单个元素上遇到异常,是否要继续处理元素?然后在循环内处理异常。

您是否希望在遇到异常时停止循环处理?然后在循环外处理异常。

答案 3 :(得分:0)

我的偏好是使异常处理尽可能接近抛出异常的代码。这为您提供了最佳的堆栈跟踪。我会把它放在循环中。 YMMV

答案 4 :(得分:0)

这取决于你在做什么

如果您计划在某个异常引发时继续迭代,那么您自然会将try catch块放入for。

如果你想在发生某些错误时停止操作,那么更好的办法就是把它放到try catch块中。

for (int i = 0; i < 10000000; i++) {
        try {

        }catch (Exception e) {

        }
    }

持续时间16毫秒。

   try {
        for (int i = 0; i < 10000000; i++) {

        }
    }catch (Exception e) {

    }

持续时间0毫秒。

答案 5 :(得分:0)

您可以识别的问题越少,越好。然后你应该将它们放在try catch块中。