1

我想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

4 回答 4

8

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

于 2012-07-26T15:38:14.763 回答
5

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

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

    Console.WriteLine(inst.file);
}
于 2012-07-26T15:38:24.060 回答
5

使用 LINQ 的 Where 子句从一开始就应用谓词

foreach(Instruction inst in instructions.Where(i => File.Exists(i.file))){
    Console.WriteLine(inst.file);
}
于 2012-07-26T15:41:26.523 回答
1

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

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

        Console.WriteLine(inst.file);
    });
于 2012-07-26T15:39:31.210 回答