c#exit使用lambda的genericsForEach

有谁知道是否可以退出使用lambda的通用ForEach? 例如

someList.ForEach(sl => { if (sl.ToString() == "foo") break; // continue processing sl here // some processing code } ); 

这段代码本身不会编译。 我知道我可以使用常规foreach但为了保持一致性我想使用lambda。

非常感谢。

当然。 但首先,请注意我建议不要这样做; 我说序列操作符不应该有副作用,并且语句应该有副作用。 如果你在ForEach lambda中做了一些事情,那么在foreach循环的主体中做一个声明,而不是让它看起来像一个序列操作符。

那就是说,这就是你做的。 首先,你自己写一个ForEach,它可以处理任意序列,而不仅仅是列表:

 public static void ForEach(this IEnumerable sequence, Action action) { foreach(var item in sequence) action(item); } 

现在你写下你的rest:

 someList .TakeWhile(x=>x.ToString() != "foo") .ForEach(sl=> {/*your action here*/}); 

来自MSDN

以下规则适用于lambda表达式中的变量范围:

snip

lambda表达式不能包含goto语句,break语句或continue语句,其目标位于正文之外或包含匿名函数的正文中。

根据您发布的代码,不知道这是否有帮助。 相关引用来自MSDN文章的末尾。

警告:以下代码不应被认真对待,仅用于娱乐目的!

您可以像这样“模拟”一个早期返回的继续:

 Enumerable.Range(1, 20) .ForEach(n => { if (n == 10) return; Console.WriteLine("This is not 10: {0}", n); }); 

也就是说,我认为lambda中的副作用表明你做错了。 使用适当的foreach代替。 或像TakeWhile这样的东西,正如埃里克亲切地certificate的那样。

这个怎么样?

  Enumerable.Range(1, 10) .Where(x => x % 2 != 0) .ToList() .ForEach(x => Console.WriteLine(x));