Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在循环中时在何处捕获异常?_C#_Exception Handling - Fatal编程技术网

C# 在循环中时在何处捕获异常?

C# 在循环中时在何处捕获异常?,c#,exception-handling,C#,Exception Handling,嗨, 我想知道您对异常处理的看法,即我有一个方法: public void Method{} { for (int i=0;i < length ) { // dosomething that may case exception ... ... // rest of the code } } public void方法{} { 对于(int i=0;i

嗨, 我想知道您对异常处理的看法,即我有一个方法:

public void Method{}
{
   for (int i=0;i < length )
   {
    // dosomething that may case exception
    ...
    ...
    // rest of the code
   }
}
public void方法{}
{
对于(int i=0;i
我应该添加try-catch块来处理整个循环的异常,还是只添加最易受攻击的代码,或者其他什么?
最佳实践是什么?

我的首选是使异常处理尽可能接近引发异常的代码。这将为您提供最佳堆栈跟踪。我会把它放在循环里。YMMV取决于你在做什么

如果您计划在出现异常时继续迭代,那么自然会将try-catch块放入for中

如果您想在发生错误时停止操作,更好的方法是将for放入try-catch块

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

        }catch (Exception e) {

        }
    }
for(int i=0;i<10000000;i++){
试一试{
}捕获(例外e){
}
}
持续时间16毫秒

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

        }
    }catch (Exception e) {

    }
试试看{
对于(int i=0;i<10000000;i++){
}
}捕获(例外e){
}

持续时间0毫秒。

这取决于您希望代码如何流动


例如,即使一个元素抛出异常,循环是否应该继续执行?如果是这样,那么您希望在for中尝试/捕获。如果不是,那么你希望你的尝试/抓住机会。

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

可以识别为有问题的行越少越好。然后你应该把它们放在try-catch块中。

这要看情况而定

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


如果出现异常,是否希望循环处理停止?然后在循环外部处理异常。

查看异常是否完全重复。通常,异常发生的地方并不是程序准备好处理的地方。