List ForEach break

有沒有方法擴展跳出 list.foreach循環?this

理論上它其實不是一個循環,而是一個方法 代理調用內部循環spa

 
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代理

相關文章
相關標籤/搜索