Операции ToArray и ToList
53LINQ --- LINQ to Objects --- Операции ToArray и ToList
Следующие операции преобразования предоставляют простой и удобный способ преобразования последовательностей в другие типы коллекций.
ToArray
Операция ToArray создает массив типа T из входной последовательности типа T. Эта операция имеет один прототип, описанный ниже:
public static Т[] ToArray<T>(
this IEnumerable<T> source);
Эта операция берет входную последовательность source с элементами типа T и возвращает массив элементов типа Т.
Для примера, демонстрирующего работу операции ToArray, понадобится последовательность типа IEnumerable<T>. Последовательность этого типа создается вызовом операции Enumerable.Range(), которая была описана ранее. Имея такую последовательность, можно вызывать операцию ToArray для создания массива, как показано ниже:
IEnumerable<int> item = Enumerable.Range(1, 20);
Console.WriteLine("Начальный тип: " + item);
int[] arr = item.ToArray();
Console.WriteLine("Используем ToArray: " + arr);

Эта операция часто бывает удобной для кэширования последовательности, чтобы она не могла измениться до начала ее перечисления. К тому же, поскольку эта операция не является отложенной и выполняется немедленно, множество перечислений, созданных на одном массиве, всегда будут видеть одни и те же данные.
ToList
Операция ToList создает List типа T из входной последовательности типа Т. Эта операция имеет один прототип, описанный ниже:
public static List<T> ToList<T>(
this IEnumerable<T> source);
Данная операция принимает последовательность по имени source элементов типа T и возвращает список List элементов типа Т. Ниже демонстрируется применение операции ToList:
string[] cars = { "Alfa Romeo", "Aston Martin", "Audi", "Nissan", "Chevrolet", "Chrysler", "Dodge", "BMW",
"Ferrari", "Bentley", "Ford", "Lexus", "Mercedes", "Toyota", "Volvo", "Subaru", "Жигули :)"};
List<string> auto = cars.ToList();
foreach (string s in auto)
Console.Write(s + " ");
В приведенном коде используется массив, состоящий из названий машин. Этот массив преобразуется в список List<string>. Вот результат:

Эта операция часто полезна для кэширования последовательности, чтобы она не могла измениться перед ее перечислением. Также, поскольку эта операция не является отложенной и выполняется немедленно, множество перечислений на созданном списке List<T> всегда видят одинаковые данные.