[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на C# станут решающим фактором. Переходите по ссылке 🔰.
Используйте IEnumerable, если нужны только базовые функции над коллекцией, например, итерация. Используйте IList, ICollection, если нужны более специфические операции над коллекцией.
Если вы хотите только перечислить данные, используйте IEnumerable.
Однако следует помнить, что изменение исходной перечисляемой коллекции является опасной операцией — в этом случае сначала нужно выполнить ToList(). Это создаст новый элемент списка для каждого элемента в памяти, перечисляя IEnumerable, и, таким образом, является менее производительным, если вы перечисляете только один раз — но более безопасным, и иногда методы List удобны (например, при случайном доступе).
При проектировании методов в C# лучше использовать интерфейсы, а не конкретные реализации, поскольку это дает наибольшую гибкость. Например, если наш метод принимает в качестве параметра IEnumerable, то вызывающая сторона может передать ему List, Array, Dictionary или любую коллекцию, которая реализует IEnumerable:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
class Programm { static void Main() { Output(new int[] { 1, 2, 3, 4, 5 }); Output(new List<string>() { "Apple", "Carrot", "Juice" }); Output(new Stack<double>(new double[] { 1, 2, 3, 4 })); } static void Output<T>(IEnumerable<T> collection) { foreach (var item in collection) { Console.WriteLine(item); } } } |
Так же, IEnumerable концептуально быстрее List из-за отложенного выполнения. Отложенное выполнение делает IEnumerable быстрее, потому что он получает данные только тогда, когда это необходимо. В отличие от списков, у которых данные постоянно находятся в памяти.