Использование только break
здесь не будет работать, потому что лямбда выполняется в другом методе, чем цикл for. Оператор break
полезен только для выхода из локальных по отношению к текущей функции конструкций.
Для поддержки стирания разрыва вам необходимо добавить перегрузку ForEach
, где делегат может указать через возвращаемое значение, которое должно выполняться при выполнении цикла. Например
public static void ForEach<T>(this IEnumerable<T> enumerable, Func<T, bool> func) {
foreach (var cur in enumerable) {
if (!func(cur)) {
break;
}
}
}
Теперь потребитель этого ForEach
метода можно указать break
путем возврата false
из предоставленного обратного вызова
myCollection.ForEach(current => {
if (someCondition) {
// Need to break
return false;
}
// Keep going
return true;
}
А что бы вы сделали в лее из 'continue', если вам нужно условно пропустить итерация - она тоже не работает. – Andrey
У вас есть лямбда, возвращающая логическое значение в вашем цикле, и, если оно вернет false, вы сломаетесь. –
'return' здесь работает как' continue', а не как 'break'. – porges