我想在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;
等等。
由于
答案 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);
});