[ Полезный рекламный блок ]
Попробуйте свои силы в игре, где ваши навыки программирования на 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 швидшим, тому що він отримує дані тільки тоді, коли це необхідно. На відміну від списків, у яких дані постійно знаходяться в пам’яті.