На самом деле foreach способствует появлению break и continue. Проблема в том, что foreach сложно использовать, как цикл while, который часто бывает нужен. То есть, в while в условие просто можно написать, что пока не прошли все элементы или же не нашли нужный элемент, то итерировать. С циклом foreach же так просто не получится. Если нашли нужный элемент, то нужно или бессмысленно идти до конца или же выпрыгивать с помощью break. Поэтому я считаю, что foreach является "родственником" для break, continue и goto и по возможности его нужно не использовать.