c#退出使用lambda的泛型ForEach

Pea*_*nut 8 c# generics foreach lambda break

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

someList.ForEach(sl =>
  {
    if (sl.ToString() == "foo")
        break;

    // continue processing sl here
    // some processing code
  }
);
Run Code Online (Sandbox Code Playgroud)

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

非常感谢.

Eri*_*ert 17

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

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

public static void ForEach<T>(this IEnumerable<T> sequence, Action<T> action)
{
    foreach(var item in sequence) action(item);
}
Run Code Online (Sandbox Code Playgroud)

现在你像这样写下你的休息:

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


cmw*_*cmw 9

来自MSDN

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

snip

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

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