Чем дольше я об этом думаю, тем больше я задаюсь вопросом, действительно ли сама идея «отложенного исполнения» вообще имеет педагогическую ценность.
Я отвечу на ваш вопрос, отрицая его. IEnumerable<T>
, IQueryable<T>
и IList<T>
никоим образом не представляют "отложенные" или "активные" вычисления.
Скорее, интерфейсы представляют собой возможность предоставления услуги . IEnumerable<T>
представляет услугу «Я могу предоставить последовательность, возможно бесконечную, элементов типа T, по одному за раз». IQueryable<T>
представляет службу «Я могу представить запрос к источнику данных и предоставлять результаты этого запроса по требованию». IList<T>
представляет услугу «Я могу предоставить произвольный доступ к возможно изменяемому списку элементов конечного размера типа T».
Ни одна из этих служб не говорит ничего о деталях реализации поставщиков услуг. Поставщик услуги IList<T>
может быть полностью ленивым; поставщик услуги IQueryable<T>
может быть полностью готов. Если вы хотите выполнить отложенное выполнение IList<T>
, вы идете прямо вперед. Вас никто не останавливает!