cigwork
Короткий ответ заключается в том, что это делает функцию еще более похожей на черный ящик.
Вызывающему абоненту не нужно знать или даже заботиться о том, реализовали ли вы извлечение в виде роли[] или списка & lt;role> или любого другого типа коллекции... при условии, что коллекция реализует интерфейс интерфейс IEnumerable
Таким образом, если бы вы нашли более новый и гораздо более эффективный способ извлечения данных, которые возвращают другой вид коллекции, реализующей IEnumerable<>, Вы могли бы изменить внутренности метода, и кроме сокращения времени вызова это не повлияло бы ни на один существующий код.
Если, скажем, вы сделали возвращаемый тип Role[] и изменили кишки на return List< role & gt;, то каждый вызов метода должен быть изменен.
Используйте свою любимую поисковую систему, чтобы найти "Программирование интерфейса". Есть много статей, которые объясняют эту идею. Вот только один...
Программа к интерфейсу не реализация/[^]
Ben J. Boyle
Что тут непонятного? Разработчик явно решил вернуть более гибкий тип, чем принудительный список или массив. Как говорит @cigwork, это позволит внутренним элементам функции изменяться без необходимости изменять какой-либо код, использующий результаты функции.