Ответ
CopyTo — это метод, доступный для типов, реализующих интерфейс ICollection (например, массивы T[], List<T>, Dictionary<TKey, TValue>.KeyCollection). Его задача — скопировать все элементы текущей коллекции в указанный одномерный массив, начиная с заданного индекса в целевом массиве.
Ключевые характеристики:
- Копирует в существующий массив: Метод не создает новый массив, а заполняет предоставленный вами.
- Требует достаточной емкости: Целевой массив должен быть уже инициализирован и иметь достаточную длину, начиная с указанного индекса
arrayIndex. - Сигнатура:
void CopyTo(T[] array, int arrayIndex)
Типичный пример использования:
// Исходная коллекция
List<string> sourceList = new List<string> { "A", "B", "C" };
// Целевой массив должен быть достаточного размера
string[] targetArray = new string[6]; // { null, null, null, null, null, null }
// Копируем все элементы из sourceList в targetArray, начиная с индекса 2
sourceList.CopyTo(targetArray, 2);
// Результат: targetArray = { null, null, "A", "B", "C", null }
Console.WriteLine(string.Join(", ", targetArray));
Какие исключения может выбросить:
ArgumentNullException: если параметрarrayравенnull.ArgumentOutOfRangeException: еслиarrayIndexменьше 0.ArgumentException**: **Наиболее частая ошибка.** Возникает, если в целевом массиве, начиная сarrayIndex`, недостаточно места для размещения всех элементов исходной коллекции.int[] smallArray = new int[2]; int[] bigList = { 1, 2, 3, 4 }; bigList.CopyTo(smallArray, 0); // ArgumentException: Длина целевого массива недостаточна.
Альтернативы и сравнение:
ToArray(): Создает новый массив со всеми элементами. Удобно, когда не нужно управлять целевым массивом.int[] newArray = sourceList.ToArray();Array.Copy(): Статический метод для копирования между массивами, поддерживает копирование части массива.- Для
List<T>: МетодAddRange()добавляет элементы в конец списка, а не в массив по индексу.