I have some list and I do list.ForEach( l => { ... something ...})
. Now, on certain condition I need to stop iterating over the list, but break
doesn't work - I get "Control cannot leave the body of an anonymous method or lambda expression
" compilation error.
Any idea how to overcome that restriction?
A lambda expression works just like a method.
It can
return
whenever you want.However,
List.ForEach
does not offer any way to prematurely stop the iteration.If you need to
break
, you just use a normalforeach
loop.You cannot stop iteration from within a
ForEach
lambda since you do not have control of the outer loop that is calling the lambda. At that point why don't you use a regularforeach
loop and abreak
statement - that would be much more readable for this case.Using
break
alone won't work here because the lambda executes in a different method than the for loop. Abreak
statement is only useful for breaking out of constructs local to the current function.In order to support a break style leave you'd need to add an overload of
ForEach
where the delegate can specify via a return value that loop execution should break. For exampleNow a consumer of this
ForEach
method can specify abreak
by returningfalse
from the provided callback