Let's see. First, the result returned from the method.
Firstly - for rigorous interfaces (and a sheet) are built from IEnumerable -> ICollection -> IList -> List (the actual implementation of IList ).
IEnumerable is an enumeration that may not have an end to which elements cannot be added.
ICollection -> IList - collections that have a fixed number of elements, you can add and remove elements, small differences between them are usually not significant.
List is a concrete implementation of the IList interface.
No interface can guarantee that the List returned. Therefore, if you need to return a List from a method, then it is with this type that the method should be.
But with the transfer of the sheet is much more complicated. The subject area is very important here.
If it is conditional the method of adding elements to the sheet - then only the sheet method should accept.
If the method sorts a sheet without using anything specific, it is quite possible to extend the effect on the IList .
If the method does not touch the incoming sheet, but generates a new list of it - then you can actually submit even an IEnumerable to the input, however, in order not to get something suspicious you can reduce it to an ICollection .
In fact, by the same rigor you sort the interfaces and see which method can still work with.
In addition to all the above, everything except IEnumerable can be changed by both parties, both the method and the one who called it. This should be taken into account with both incoming and return values.