C#에서 List<string>과 같은 컬렉션을 배열로 복사할 때 가장 간단한 방법은 CopyTo() 메서드를 사용하는 것입니다. 이 메서드는 컬렉션의 모든 요소를 지정된 배열의 첫 번째 인덱스부터 순서대로 복사해 줍니다.
1단계: 컬렉션 생성하기
먼저 복사할 대상이 되는 컬렉션을 다음과 같이 설정합니다.
List<string> list1 = new List<string>();
list1.Add("Car");
list1.Add("Bus");
list1.Add("Motorbike");
list1.Add("Train");
2단계: 배열 선언 후 CopyTo()로 복사하기
다음으로 요소를 담을 문자열 배열을 선언하고, CopyTo() 메서드를 호출하여 컬렉션의 내용을 복사합니다.
string[] arr = new string[20];
list1.CopyTo(arr);
이때 주의할 점은 대상 배열의 크기가 복사할 요소 수보다 크거나 같아야 한다는 것입니다. 위 예제에서는 여유를 두고 크기가 20인 배열을 선언했습니다. 배열의 크기가 부족하면 ArgumentException이 발생합니다.
전체 예제 코드
지금까지의 과정을 하나의 완성된 코드로 정리하면 다음과 같습니다.
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
public static void Main() {
List<string> list1 = new List<string>();
list1.Add("Car");
list1.Add("Bus");
list1.Add("Motorbike");
list1.Add("Train");
Console.WriteLine("First list...");
foreach(string value in list1) {
Console.WriteLine(value);
}
string[] arr = new string[20];
list1.CopyTo(arr);
Console.WriteLine("After copy...");
foreach(string value in arr) {
Console.WriteLine(value);
}
}
}
실행 결과
First list...
Car
Bus
Motorbike
Train
After copy...
Car
Bus
Motorbike
Train
복사 후 배열에는 컬렉션의 요소들이 인덱스 0부터 차례대로 저장되며, 남은 인덱스에는 빈 값(null)이 들어갑니다. 따라서 출력 시 나머지 요소들은 빈 줄로 표시됩니다.
참고: ToArray() 메서드 활용하기
배열의 크기를 미리 지정하고 싶지 않다면, LINQ에서 제공하는 ToArray() 확장 메서드를 사용하는 것이 더 편리합니다. 이 메서드는 컬렉션의 요소 수에 맞춰 새 배열을 자동으로 생성해 반환합니다.
string[] arr = list1.ToArray();
정리하면, 미리 선언된 배열에 복사할 때는 CopyTo(), 새 배열을 바로 만들 때는 ToArray()를 사용하는 것이 좋습니다.