В каких случая использовать обобщенные коллекции ICollection, IList, List?

IEnumerable и IQueryable понятно в принципе - когда необходимо получить отсортированные данные, то используем IQueryable. В случае если весь набор данных, то IEnumerable.
А как тогда с обобщенные коллекции ICollection, IList, List ?
  • Вопрос задан
  • 1142 просмотра
Решения вопроса 1
Про интерфейсы IEnumerable и IQueryable почитай мой ответ тут.

Интерфейс ICollection наследуется от IEnumerable и подразумевает, что реализующие его классы умеют эффективно вставлять и удалять элементы.

Интерфейс IList наследуется от ICollection и подразумевает, что реализующие его классы умеют предоставлять доступ к элементу по индексу.

List это конкретный класс, который реализует интерфейсы IList, ICollection т.е. подразумевается, что он умеет эффективно вставлять/удалять и давать доступ по индексу.

Попробую на пальцах когда и что использовать...
Функция получает:
IEnumerable - подразумевается, что ты только перебираешь элементы.

IQueryable - клиентам придется попотеть что бы ты мог дополнить дерево выражений, что бы обеспечить более точный запрос.

ICollection - ты уверен, что хочешь что то добавить или удалить в коллекции в этой функции ? Один из звоночков, что с архитектурой могут быть проблемы.

IList - а ты уверен что тебе очень критично иметь доступ по индексу в этой функции ? Второй звоночек про архитектуру.

List - работаю только со списками и не пытайтесь дать мне другой контейнер.

Функция возвращает:
IEnumerable - никаких обещаний, пусть клиенты рассчитывают только на перебор.

IQueryable в функции запрос (например к дб) фактически не выполняется и клиенты могут попытаться его дополнить условиями, что бы с базы шло меньше данных.

ICollection - ты возвращаешь коллекцию путь кто хочет тот и добавляет и удаляет в ней элементы.

IList - ты уже создал в функции соответствующую коллекцию, возможно кому то понадобится доступ по индексу.

List - да мне наc..ть на интерфейсы создал список - отдал список и я всегда буду создавать список, даже если мне потребуется создать последовательность из 100500 миллионов элементов.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы