и содержит информацию о количестве элементов.
Практически всегда под IEnumerable возвращается коллекция. Если вы возвращаете ее как IEnumerable, то с большой доле1 вероятности клиент вызовет на ней ToArray, чтобы передать в другое место. Если количество элементов большое, то будет создано log_2(n) массивов с копированием элементов из одного в другой. Также это помешает использовать такую коллекцию в цикле for.
Используйте IEnumerable для возвращения отложенных вычислений. Имея на руках массив или список возвращайте IReadOnlyList, для прочих коллекций - IReadOnlyCollection. Или не морочьте никому голову и возвращайте массив. Но не возвращайте IEnumerable для коллекций без отложенного вычисления, это породит лишнее копирование и лишние вопросы - могу ли я вернуть IEnumerable и перечислить его после закрытия коннекции? Могу ли я перечислять его одновременно с другими вызовами? Могу ли шарить энумератор между несколькими потоками.
Возврат IEnumerable затрудняет понимание кода, а не упрощает API.
Это что, с м**та текст?
> Практически всегда под IEnumerable возвращается коллекция. На самом деле не так уж и редко клиентам бывает нужно просто проитерироваться по элементам. Но да, в большинстве случаев лучше подойдёт IReadOnlyList или IReadOnlyCollection, спасибо за развёрнутый комментарий! :)
Мы на продакшене только айнумерабл и возвращаем ....хм
Подписываюсь под каждым словом, хотя есть фигня в том что IList не реализует IReadOnlyList
Наверное, есть и другие примеры на правило "если можно конкретизировать без урезания функционала - конкретезируй"
Обсуждают сегодня