有没有方法扩展跳出 list.foreach循环?
理论上它其实不是一个循环,而是一个方法 代理调用内部循环
public delegate void ForEachAction<T>(T value, ref bool doBreak)
public static void ForEach<T>(this IEnumerable<T> enumerable, ForEachAction<T> action) { var doBreak = false; foreach (var cur in enumerable) { action(cur, ref doBreak); if (doBreak) { break; } } }
扩展之后写法如下:
Enumerable.Range(0,10) .ForEach((int i,ref bool doBreak) => { System.Windows.MessageBox.Show(i.ToString()); if ( i > 2) {doBreak = true;} });
或者选用另一种方式使用TakeWhile
Enumerable.Range(0, 10).TakeWhile(i => i <= 2).ToList().ForEach(i => MessageBox.Show(i.ToString()));
参考:http://stackoverflow.com/questions/3145563/list-foreach-break