Я не согласен с предпосылкой, что лучше вернуть интерфейс. Моя причина в том, что вы хотите максимизировать полезность, которую предоставляет данный блок кода.
Имея это в виду, интерфейс работает для принятия элемента в качестве аргумента. Если параметр функции вызывает массив или ArrayList, это единственное, что вы можете передать ему. Если параметр функции вызывает IEnumerable, он будет принимать как и ряд других объектов. Это более полезно
Однако возвращаемое значение работает наоборот. Когда вы возвращаете IEnumerable, единственное, что вы можете сделать, это перечислить его. Если у вас есть список List и вы возвращаете его, тогда код, который вызывает вашу функцию, также может легко выполнить ряд других действий, например, получить счетчик.
Однако я едиен с теми, кто советует вам уйти от ArrayList. Дженерики намного лучше.