是否有与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的链接。
答案 0 :(得分:51)
A)ForEach不是LINQ,它是List<T>
上的一种方法
B)只需使用foreach
C)return
会这样做。
修改强>
只是为了澄清,你正在做的是为列表中的每个条目提供一个方法。 return
将仅适用于该成员的方法。列表中的其余成员仍将调用该方法。
答案 1 :(得分:18)
就个人而言,我只使用标准的foreach循环而不是List<T>.ForEach
。
在这种情况下,您可以反转条件(以避免在这种情况下的代码)或调用return
,因为您的目标是使用continue
语句。但是,如果您想要break
,这将无效。话虽如此,有很多few other reasons to avoid List<T>.ForEach
,所以我会考虑将其转换为正常的foreach语句。
答案 2 :(得分:10)
只需颠倒您的if
条件:
lst.ForEach(id => {
var article = GetArticle(id);
if (!article.author.contains("Twain"))
{
// other code here
}
});
答案 3 :(得分:3)
您使用的方法是List<T>.ForEach
,这是在类上定义的方法,而不是LINQ扩展方法。这个问题实际上与LINQ无关。
return;
的委托中的 List<T>.ForEach
应使用实际continue;
构造中的foreach
进行近似。
答案 4 :(得分:2)
回答你的问题:
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
,尽管它有时可用于快捷代码块。
答案 5 :(得分:1)
继续在foreach中循环回到循环顶部到序列中的下一个项目。如果这就是你想要的,那么应该回归。如果要完全退出,可能需要使用实际的LINQ方法(如Any()。
)重写它