Вероятно, правильнее назвать это List<T>
Foreach против LINQ.
В любом случае, хотя нет, нет способа выйти из этого цикла. Прежде всего потому, что на самом деле это не цикл. Это метод, который принимает делегат, который вызывается внутри цикла.
Создание 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;}
});