如何离开lambda表达式的主体

And*_*rey 7 c# lambda

我有一些清单,而且我有list.ForEach( l => { ... something ...}).现在,在某些情况下,我需要停止迭代列表,但break不起作用 - 我得到" Control cannot leave the body of an anonymous method or lambda expression"编译错误.

知道如何克服这种限制吗?

Jar*_*Par 10

break单独使用在这里不起作用,因为lambda以与for循环不同的方法执行.一个break说法是只对结构局部于当前功能的突破是有用的.

为了支持中断样式,您需要添加ForEach委托可以通过循环执行应该中断的返回值指定的重载.例如

public static void ForEach<T>(this IEnumerable<T> enumerable, Func<T, bool> func) {
  foreach (var cur in enumerable) {
    if (!func(cur)) {
      break;
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

现在,此ForEach方法的使用者可以break通过false从提供的回调中返回来指定

myCollection.ForEach(current => {
  if (someCondition) {
    // Need to break
    return false;
  }
  // Keep going
  return true;
}
Run Code Online (Sandbox Code Playgroud)


SLa*_*aks 5

lambda表达式就像一个方法一样工作.
它可以return随时随地.

但是,List.ForEach不提供过早停止迭代的任何方法.
如果需要break,您只需使用正常foreach循环.

  • `return`就像`continue`,而不是`break`. (3认同)