如何在 .ForEach() 方法中使用 continue 语句
Posted
技术标签:
【中文标题】如何在 .ForEach() 方法中使用 continue 语句【英文标题】:How can I use continue statement in .ForEach() method 【发布时间】:2012-01-10 03:06:03 【问题描述】:有没有等价于 ForEach 方法中的 continue 语句?
List<string> lst = GetIdList();
lst.ForEach(id =>
try
var article = GetArticle(id);
if (article.author.contains("Twain"))
//want to jump out of the foreach now
//continue; **************this is what i want to do*******
//other code follows
编辑: 感谢所有伟大的答案。感谢您澄清 .foreach 不是扩展方法。我使用这种结构来保持编码风格的一致性(不同的程序员在同一个类中使用另一种类似的方法)......感谢提供为什么要避免使用 .foreach 的链接。
【问题讨论】:
如果你想用foraech那么糟糕,用普通的foreach代替 冒着过分强调的风险,请请请使用标准的foreach循环。 重新检查“继续”一词。在循环中,“继续”的意思是“停止处理这个项目并转到下一个项目”。完全退出处理的关键字是“break” 【参考方案1】:A) ForEach 不是 LINQ,它是 List<T>
上的一个方法。
B) 只需使用 foreach。
C) return
会做到的。
编辑
澄清一下,您所做的是提供一种方法,该方法将为列表中的每个条目调用。 return
只会应用于该成员的方法。列表中的其余成员仍将调用该方法。
【讨论】:
+1,因为它与所选答案的答案相同,但提前 1 分钟。【参考方案2】:就我个人而言,我只会使用标准的 foreach 循环而不是 List<T>.ForEach
。
在这种情况下,您可以反转条件(以避免这种情况下的代码)或调用return
,因为您的目标是使用continue
语句。但是,如果您想break
,这将行不通。话虽这么说,有很多few other reasons to avoid List<T>.ForEach
,所以我会考虑将其切换为普通的foreach语句。
【讨论】:
【参考方案3】:只需反转您的if
条件:
lst.ForEach(id =>
var article = GetArticle(id);
if (!article.author.contains("Twain"))
// other code here
);
【讨论】:
【参考方案4】:您使用的方法是List<T>.ForEach
,这是在类上定义的方法,而不是 LINQ 扩展方法。这个问题其实和LINQ无关。
传递给List<T>.ForEach
的委托中的return;
应该在实际的foreach
构造中近似使用continue;
。
【讨论】:
【参考方案5】:回答你的问题:
List<string> lst = GetIdList();
lst.ForEach(id =>
try
var article = GetArticle(id);
if (article.author.contains("Twain"))
goto _continue;
//other code follows
_continue:;
其他答案是正确的,避免使用.ForEach()
。也应该避免使用goto
,尽管它有时对缩短代码块很有用。
【讨论】:
【参考方案6】:在 foreach 中继续将循环回到循环顶部到序列中的下一项。如果这就是你想要的,return 应该这样做。如果你想完全退出,你可能想使用像 Any() 这样的实际 LINQ 方法重写它。
【讨论】:
以上是关于如何在 .ForEach() 方法中使用 continue 语句的主要内容,如果未能解决你的问题,请参考以下文章
node.js:如何在 forEach 循环中使用异步调用实现路由方法?
Dictionary.ContainsKey / Value与检查某个键/值的foreach循环之间的速度是否存在差异
如何在 Postgres 中使用带有多个分位数的 percentile_conts