Практическое различие между List и IEnumerable

Прочитав подобные сообщения, я узнал, что List - это тип IEnumerable. Но мне действительно интересно, какова практическая разница между этими двумя на самом деле.

Кому-то, кто всегда использовал List и никогда не использовал IEnumerable:

  • Какова практическая разница между этими двумя?
  • В каких сценариях один из них лучше другого?

Вот пример : Мы хотим сохранить четыре строки, упорядочить их в алфавитном порядке, передать их другой функции и затем показать пользователю результат. Что мы будем использовать и почему?

Надеюсь, кто-то может разобраться в этом для меня или указать мне в правильном направлении. Спасибо заранее!

Ответ 1

Одно важное различие между IEnumerable и List (помимо того, что он является интерфейсом, а другой - конкретным классом) состоит в том, что IEnumerable доступен только для чтения, а List - нет.

Итак, если вам нужна возможность вносить постоянные изменения в вашу коллекцию (добавлять и удалять), вам понадобится List. Если вам просто нужно читать, сортировать и/или фильтровать свою коллекцию, для этой цели достаточно IEnumerable.

Итак, в вашем практическом примере, если вы хотите добавить четыре строки по одному, вам понадобится List. Но если вы создавали экземпляр своей коллекции сразу, вы могли бы использовать IEnumerable.

IEnumerable firstFourLettersOfAlphabet = new[]{"a","b","c","d"};

Затем вы можете использовать LINQ для фильтрации или сортировки списка, но вы хотели.

Ответ 2

Многие типы, кроме List, реализуют IEnumerable, такие как ArrayList. Таким образом, одно преимущество заключается в том, что вы можете передавать разные типы коллекций в одну и ту же функцию.