在c#foreach循环中catch {}和catch {continue;}之间的区别是什么?

时间:2010-06-10 17:28:17

标签: c#

foreach (Widget item in items)
{
 try
 {
  //do something...
 }
 catch { }
}


foreach (Widget item in items)
{
 try
 {
  //do something...
 }
 catch { continue; }
}

5 个答案:

答案 0 :(得分:20)

catch { continue; }将导致代码在新的迭代中开始,在循环中的catch块之后跳过任何代码。

答案 1 :(得分:9)

其他答案会告诉您在给定的代码段中会发生什么。使用catch子句是循环中的最终代码,没有功能差异。如果您的代码遵循catch子句,那么没有“continue”的版本将执行该代码。 continuebreak的继兄,它会使循环体的其余部分短路。使用continue,它会跳到下一次迭代,而break完全退出循环。无论如何,要为自己展示你的两种行为。

for (int i = 0; i < 10; i++)
{
    try
    {
        throw new Exception();
    }
    catch
    {
    }

    Console.WriteLine("I'm after the exception");
}

for (int i = 0; i < 10; i++)
{
    try
    {
        throw new Exception();
    }
    catch
    {
        continue;
    }

    Console.WriteLine("this code here is never called");
}

答案 2 :(得分:8)

在这种情况下,没有,因为try是循环复合语句的最后一个语句。 continue将始终进入下一次迭代,或者如果条件不再成立则结束循环。

答案 3 :(得分:3)

编译器将忽略它。这是从Reflector中获取的。

public static void Main(string[] arguments)
{
    foreach (int item in new int[] { 1, 2, 3 })
    {
        try
        {
        }
        catch
        {
        }
    }
    foreach (int item in new int[] { 1, 2, 3 })
    {
        try
        {
        }
        catch
        {
        }
    }
}

答案 4 :(得分:0)

如果你的样本是逐字逐句的,那么,我会说“没有区别”!

但是,如果您在捕获之后要执行声明,则完全是另一种游戏! 在{} {}之后,catch { continue; }会跳过任何内容! catch{}仍然会在catch块后执行语句!!