The short answer is because it makes the function even more of a black box.
The caller doesn't need to know or even care if you have implemented the retrieval as a Role[] or a List<role> or any other collection type... provided the collection implements the
interface IEnumerable
So if you found a newer and far more efficient way of retrieving the data that returned a different sort of collection implementing IEnumerable<> you could change the guts of the method and apart from the reduction in call time it wouldn't affect any existing code.
If, say, you had made the return type Role[] and you changed the guts to return List<role> then
every call of the method would have to be changed.
USe your favourite search engine to look up "programming to an interface". There are lots of articles that explain the idea. Here's just one...
Program to an interface not an implementation/[
^]