Перечислитель только возвращает один объект за один раз, поскольку Вы выполняете итерации по нему. Это вызвано тем, что это использует возврат урожая . Набор, с другой стороны, возвращает весь список, требуя что список быть сохраненным полностью в памяти.
короткий ответ - то, что перечислители легче и более эффективны.
Это дает Вам больше свободы при выборе Базовой структуры данных.
Список А предполагает, что индексация поддержки внедрения, но ICollection не делает такого предположения.
Это означает, что, если Вы обнаруживаете, что Набор мог бы обеспечить лучшую производительность, так как упорядочивание не важно, затем Вы свободны изменить свой подход, не влияя на клиенты.
Это - основная инкапсуляция.
ICollection является просто интерфейсом, в то время как Список является определенной реализацией того интерфейса. Что, если Вы хотели позже использовать некоторый другой контейнер помимо списка? При общедоступном представлении интерфейса ICollection можно изменить внутренний контейнер на что-то еще позже - пока новый контейнер также реализует интерфейс ICollection.
Я думал бы, что IList будет более соответствующим, но...