List<T> ForEach break

有没有方法扩展跳出 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

posted @ 2016-01-28 17:36  碎碎虎  阅读(698)  评论(0编辑  收藏  举报