In fact, it all depends on what type of access you want to allow for consumers of your repositories, services, etc.
If you only want consumers to read the collection, use IEnumerable<T> (write methods are not available).
If you want consumers to add directly to the collection, the methods in ICollection<T> will give them that.
In general, I try to expand collections as IEnumerable<T> as often as possible. When users want to add something to the collection, they should call a separate method, and not directly write to the collection. This gives you the ability to verify your entry, perform other checks, etc.
source share