我有一些清单,而且我有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)
lambda表达式就像一个方法一样工作.
它可以return随时随地.
但是,List.ForEach不提供过早停止迭代的任何方法.
如果需要break,您只需使用正常foreach循环.
| 归档时间: |
|
| 查看次数: |
4920 次 |
| 最近记录: |