有沒有方法擴展跳出 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代理