在ForEach函数中模拟break语句

时间:2010-03-01 20:09:10

标签: c# lambda

这更像是一个假设性的问题,因为我越来越多地使用.NET 3.5以及lambda表达式和匿名委托。举个简单的例子:

static void Main(string[] args)
{
   List<int> numList = new List<int>(int[] { 1, 3, 5, 7, 9, 11, 12, 13, 15 });

   numList.ForEach(i =>
   {
       if (i % 2 == 1)
           Console.Write(i);
       else
           return;
   });

   Console.ReadLine();
}

这将产生输出:

  

13579111315

当然,我真正喜欢它的是在12之后停止执行ForEach函数,而不是打印13或15.在传统的foreach结构中,你会有一个休息(而不是我的回归)例子),循环结束。但是,在这种情况下,休息是非法的。您收到以下消息:

  

没有封闭的循环可以打破或继续

是否有一个我可以轻松使用的构造来获得所需的结果,或者如果您不打算在每个单独的成员上实际运行所需的代码,那么在这种情况下使用标准的foreach循环会更好吗?列出?

1 个答案:

答案 0 :(得分:3)

只需使用标准foreach循环即可。这几乎总是比使用lambda表达式更简单,更容易混淆 - 你不会对捕获的变量等产生混淆。

您可能希望阅读Eric Lippert's post on this as well

List<T>.ForEach非常有用,如果你已经交给一个委托而你只想在列表中的每个元素上执行它 - 但是否则我会坚持使用正常的语言功能。