如何从C#</t>中的if语句中中断List <t> .ForEach()循环

时间:2012-07-26 15:36:05

标签: c# for-loop foreach

我想在List<T>.ForEach()语句中跳过if循环的迭代。

我有代码:

        instructions.ForEach(delegate(Instruction inst)
        {                
            if (!File.Exists(inst.file))
            {
                continue; // Jump to next iteration
            }

            Console.WriteLine(inst.file);
        });

然而,编译器声明没有任何东西可以跳出来(可能是因为它似乎将if块作为封闭块?)。

无论如何都要做到以上几点?像parentblock.continue;等等。

由于

4 个答案:

答案 0 :(得分:8)

使用return语句代替continue。请记住,通过使用ForEach扩展方法,您正在为每个项执行一个函数,其主体在{和}之间指定。通过退出该功能,它将继续使用列表中的下一个值。

答案 1 :(得分:5)

在这种情况下,

ForEach只是一个为列表中的每个项执行委托的方法。它不是循环控制结构,因此continue不能出现在那里。将其重写为正常的foreach循环:

foreach (var inst in instructions) {
    if (!File.Exists(inst.file))
    {
        continue; // Jump to next iteration
    }

    Console.WriteLine(inst.file);
}

答案 2 :(得分:5)

使用LINQ的Where子句从开头应用谓词

foreach(Instruction inst in instructions.Where(i => File.Exists(i.file))){
    Console.WriteLine(inst.file);
}

答案 3 :(得分:1)

发送到ForEach函数的委托将在指令列表中的每个项目运行一次。为了跳过一个项目,只需从委托函数返回。

    instructions.ForEach(delegate(Instruction inst)
    {                
        if (!File.Exists(inst.file))
        {
            return; // Jump to next iteration
        }

        Console.WriteLine(inst.file);
    });