在catch区继续

时间:2014-05-27 02:30:14

标签: c# exception-handling

这是:

// 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) { }
}

(因为在后一种情况下循环仍会继续)

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

3 个答案:

答案 0 :(得分:8)

continue让你跳过当前循环中的剩余参数,然后跳转到下一次迭代。

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

答案 1 :(得分:1)

两者都相同!!但是在你的代码中使用空catch语句并不是一个好习惯。第一段代码更合适..你可以添加代码来从for循环中出来或者在if (e.Number == 64)

答案 2 :(得分:1)

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

鉴于property getter should never throw an exception,很难想象这是.NET框架类的实际问题。但由于这个原因,这些部分(严格来说)并不相同。