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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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