如何离开lambda表达式的主体
我有一些列表,我做list.ForEach( l => { ... something ...})
。 现在,在某些条件下,我需要停止迭代列表,但break
不起作用 – 我得到“ Control cannot leave the body of an anonymous method or lambda expression
”编译错误。
知道如何克服这种限制吗?
单独使用break
不会在这里工作,因为lambda以与for循环不同的方法执行。 break
语句仅对中断当前函数的构造有用。
为了支持中断样式,您需要添加ForEach
的重载,其中委托可以通过返回值指定循环执行应该中断。 例如
public static void ForEach(this IEnumerable enumerable, Func func) { foreach (var cur in enumerable) { if (!func(cur)) { break; } } }
现在,这个ForEach
方法的使用者可以通过从提供的回调中返回false
来指定break
myCollection.ForEach(current => { if (someCondition) { // Need to break return false; } // Keep going return true; }
lambda表达式就像一个方法一样工作。
它可以随时return
。
但是, List.ForEach
不提供过早停止迭代的任何方法。
如果你需要break
,你只需使用一个正常的foreach
循环。
您无法停止ForEach
lambda中的迭代,因为您无法控制调用lambda的外部循环。 那时为什么不使用常规的foreach
循环和break
语句 – 对于这种情况来说,这将更具可读性。
上述就是C#学习教程:如何离开lambda表达式的主体分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1008935.html