В чем реальное преимущество возврата ICollection<T> вместо списка<T>?[дубликат]

StackOverflow https://stackoverflow.com/questions/426182

Вопрос

Я прочитал пару сообщений в блоге, в которых упоминается, что для общедоступных API мы всегда должны возвращать ICollection (или IEnumerable) вместо List .В чем реальное преимущество возврата ICollection вместо списка?

Спасибо!

Дублировать: В чем разница между Списком (из T) и коллекцией (из T)?

Это было полезно?

Решение

Перечислитель возвращает только один объект за раз, когда вы выполняете итерацию по нему.Это происходит потому, что он использует доходность возврат.Коллекция, с другой стороны, возвращает весь список, требуя, чтобы список был полностью сохранен в памяти.

Короткий ответ заключается в том, что счетчики легче и эффективнее.

Другие советы

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

Список предполагает, что реализация поддерживает индексацию, но ICollection не делает такого предположения.

Это означает, что если вы обнаружите, что Набор может обеспечить лучшую производительность, поскольку порядок не имеет значения, то вы можете изменить свой подход, не затрагивая клиентов.

Это базовая инкапсуляция.

Я бы подумал, что IList был бы более уместен, но...

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top