Дело в том, что foreach, например, не позволяет изменять коллекцию, по которой итерирует, а иногда это надо.
С другой стороны, если в коде семантически коллекция предметов, то гораздо более понятным будет использование foreach и работа внутри цикла с предметом, а не с элементом массива.
Так что приводить всё к одному или к другому тоже не вариант
Сергей отлично привел аргумент "против" foreach, хотя не то, что это аргумент против, просто факт с которым можно работать