在catch block中继续

本文关键字:继续 block catch | 更新日期: 2023-09-27 18:05:22

这是:

// retry
for (int i = 0; i < length; ++i)
{
    try
    {
        sqlCommand.ExecuteNonQuery();
    }
    catch (SqlException e)
    {
        if (e.Number == 64)
        {
            continue;
        }
    }
}
相当于:

// retry
for (int i = 0; i < length; ++i)
{
    try
    {
        sqlCommand.ExecuteNonQuery();
    }
    catch (SqlException e) { }
}

(因为后一种情况下循环将继续)

有什么区别(如果有的话)?

在catch block中继续

continue允许您跳过当前循环中的其余语句,并跳转到下一次迭代。

对于我们现在拥有的代码,它没有什么区别。由于if (e.Number == 64) { continue; }之后没有更多的代码。

对于所有实际意图,代码段是等效的。然而,有一个边缘情况,原则上不应该发生:如果getter e.Number被求值并抛出异常会发生什么?如果发生这种情况,第一个示例中的代码将抛出,而第二个示例将继续。

考虑到属性getter不应该抛出异常,很难想象这是。net框架类的一个实际问题。但是由于这个原因,这些片段(严格来说)是不相同的。

两者完全相同!!但是在你的代码中有空的catch语句不是一个好的做法。第一部分代码更合适。如果if (e.Number == 64)

,则可以添加代码以退出for循环或记录异常。