在For循环中放置Try-Catch是不好的做法吗?

时间:2016-01-08 18:02:32

标签: c# for-loop try-catch

我正在创建一个删除子目录/文件的命令行实用程序。如果正在使用文件,则抛出System.IO.IOException。我在for循环中使用了try-catch块。

问题:

1.在for循环中使用try-catch是不好的做法吗?

2.如果是,有什么更好的选择?

我的代码:

  System.IO.DirectoryInfo di = new DirectoryInfo(path);

    foreach (FileInfo file in di.GetFiles())
    {
         try
         {
             file.Delete(); 
         }
         catch(System.IO.IOException)
         {
           Console.WriteLine("Please Close the following File {0}", file.Name);
         }

    }

2 个答案:

答案 0 :(得分:14)

不,这可能非常有用。例如:如果你没有想要在抛出Exception时完全停止循环,或者由于Exception而有额外的代码不应该为当前迭代运行,你可以做类似的事情。以下

System.IO.DirectoryInfo di = new DirectoryInfo(path);

foreach (FileInfo file in di.GetFiles())
{
     try
     {
         file.Delete(); 
     }
     catch(System.IO.IOException)
     {
       Console.WriteLine("Please Close the following File {0}", file.Name);
       continue;
     }
     //
     // Other Code 
     //
}

通过这种方式,您可以记录错误以便稍后查看,但仍会处理您尝试处理的其余内容。

答案 1 :(得分:0)

不,故意跳过异常并不是一个坏习惯。 但是看看你的用例

<块引用>

我正在创建一个命令行实用程序,它将删除子目录/文件。如果文件正在使用中,则抛出 System.IO.IOException。

我建议您删除目录而不是在子文件夹中的每个文件上循环。 https://docs.microsoft.com/en-us/dotnet/api/system.io.directory.delete?view=net-5.0