Во многих проектах, над которыми я работаю, всякий раз, когда мне приходится возвращать коллекцию только для чтения, я использую интерфейс IEnumerable<T> и делаю его типичным следующим:
Public ReadOnly Property GetValues() As IEnumerable(Of Integer)
Get
'code to return the values'
End Get
End Property
В большинстве случаев я возвращаю список, но в некоторых функциях и свойствах только для чтения я возвращаю массив, который также служит цели, любезно предоставленными методами расширения.
Мой вопрос заключается в том, что я нарушаю любые принципы проектирования, возвращая IEnumerable<T> вместо определенных типов (например: List<T>, HashSet<T>, Stack<T> или Array s)?