170 похожих чатов

Есть интерфейс IReadOnlyList<T>. Он позволяет перечислять, получать элементы по индексу

и содержит информацию о количестве элементов.

Практически всегда под IEnumerable возвращается коллекция. Если вы возвращаете ее как IEnumerable, то с большой доле1 вероятности клиент вызовет на ней ToArray, чтобы передать в другое место. Если количество элементов большое, то будет создано log_2(n) массивов с копированием элементов из одного в другой. Также это помешает использовать такую коллекцию в цикле for.

Используйте IEnumerable для возвращения отложенных вычислений. Имея на руках массив или список возвращайте IReadOnlyList, для прочих коллекций - IReadOnlyCollection. Или не морочьте никому голову и возвращайте массив. Но не возвращайте IEnumerable для коллекций без отложенного вычисления, это породит лишнее копирование и лишние вопросы - могу ли я вернуть IEnumerable и перечислить его после закрытия коннекции? Могу ли я перечислять его одновременно с другими вызовами? Могу ли шарить энумератор между несколькими потоками.

Возврат IEnumerable затрудняет понимание кода, а не упрощает API.

5 ответов

5 просмотров

Это что, с м**та текст?

> Практически всегда под IEnumerable возвращается коллекция. На самом деле не так уж и редко клиентам бывает нужно просто проитерироваться по элементам. Но да, в большинстве случаев лучше подойдёт IReadOnlyList или IReadOnlyCollection, спасибо за развёрнутый комментарий! :)

Мы на продакшене только айнумерабл и возвращаем ....хм

Подписываюсь под каждым словом, хотя есть фигня в том что IList не реализует IReadOnlyList

Наверное, есть и другие примеры на правило "если можно конкретизировать без урезания функционала - конкретезируй"

Похожие вопросы

Обсуждают сегодня

коллеги, добрый вечер! А никто не знает как модальная форма может себя закрыть? Ну допустим модальная форма определила, что смысла ей работать нет и хочет вернуть modalResult...
Михаил
83
вышел новый лазарус 3.4.0 кто пользовался? что нового? на что обратить внимание? итд
livontiy
22
Hi there everyone Is there anyone who have not started hamster bot yet? I need only one, I'll be glad if you do this for me DM if you haven't yet
Mehrshad
53
Здравствуйте, надеюсь найти ответ, при выполнение программы все работает, но добавим на форму элемент, при новом запуске остается то что было до изменения, новой кнопки, разме...
Стивен Хикс
15
Что нового в Xcode 16 Xcode 16 приносит много обновлений. Главное - появление ИИ, которое отметили еще в кейноуте. В Xcode появится предиктивное завершение кода, основанное н...
✌️(´ヮ`)
1
Добрый день. Ни у кого случайно нет примера Си+SDL2 анимации объекта? Не получается реализовать движение ((( Схема такая: SDL_CreateWindow SDL_GetWindowSurface SDL_FillRect ...
8921 *** ** **
9
всем привет. Может кто нибудь объяснить фокус с целочисленным делением? компилятор заменяет выражение вида x/6 на MOVQ AX, CX SARQ $63, AX MOVQ ...
Павлик Ливаткин
6
Привет) подскажите пожалуйста, можно как-то сделать так, чтобы в одном файле было несколько независимых друг от друга задач, которые можно было бы запускать так же независимо ...
Eule
9
Я не понимаю зачем нужен новый тип Int128, который занимает столько же места сколько и uuid, те я как и раньше пользовался uuid, так и дальше буду пользоваться Как тут в чате...
Сергей Романенко
6
А как старый хаскел с новым стыковать ? потому как тут работает https://play.haskell.org/saved/C3xpMzcd, а вот тут https://stepik.org/lesson/7602/step/9?unit=1473 нет ошибка C...
Fedor
131
Карта сайта