У Эрика Липперта есть хороший пост о том, почему возвращать массив обычно плохая идея .
Как правило, вы должны быть настолько общими, насколько это возможно, не причиняя чрезмерного горя тому, кто будет вызывать ваш метод. Предпочитайте интерфейсы конкретным классам и выберите наиболее общий интерфейс, с которым вы можете справиться.
Возвращаемые интерфейсы лучше инкапсулируют вашу реализацию и облегчат изменения в будущем. Если вы начинаете с конкретного типа, вы обязуетесь всегда возвращать этот тип.
IEnumerable<T>
- лучшее место для начала. С появлением LINQ очень мало вещей, которые вызывающий абонент не может сделать легко, просто учитывая перечисление. Если вызывающему абоненту иногда требуется список, достаточно просто позвонить .ToList()
.
Если вызывающим, вероятно, будет определенная потребность индексировать возвращаемую коллекцию, или если они, вероятно, захотят сами изменить коллекцию (вставка / удаление / переупорядочение элементов), рассмотрите возможность использования IList<T>
.