Использование только 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;
}