我有一些看起来像这样的代码:
foreach(var obj in collection)
{
try
{
// WriteToFile returns the name of the written file
string filename = WriteToFile(obj);
SendFileToExternalAPI(filename);
}
catch ( ArbitraryType1Exception e )
{
LogError(e);
continue;
}
...
catch ( ArbitaryTypeNException e )
{
LogError(e);
continue;
}
finally
{
try
{
File.Delete(filename);
}
catch (Exception e)
{
LogError(e);
}
}
}
目的是尝试为集合中的每个对象写出一个临时文件,尝试将该文件加载到需要文件名的外部API中,然后在完成后清理该临时文件。如果在将文件写到磁盘或将其加载到外部API时发生错误,我只想记录错误并继续下一个对象;我不能问用户该怎么办。
当您在catch处理程序中有continue语句时,我不确定finally块的计时如何工作。无论try块中是否引发异常,此代码是否都会(试图)删除正确的文件?还是catch语句中的continue在finally块运行之前生效?
最佳答案
可以将其视为try/finally块,其中catch表达式是可选的。代码中的两个continue语句都会将执行堆栈弹出到catch之外,这将使执行继续放置在finally块中,然后再允许循环继续进行。每当有一个try/finally块时,finally将始终被执行。
关于c# - 如果catch块包含continue语句,那么finally块何时执行?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/11200417/