C# 리스트 복사의 기본 개념
C#에서 List<T>를 복사하거나 복제하려면 CopyTo() 메서드를 활용할 수 있습니다. 이 메서드는 리스트의 모든 요소를 기존의 1차원 배열로 복사해 줍니다.
먼저 복사할 원본 리스트를 생성합니다.
List<string> list1 = new List<string>();
list1.Add("One");
list1.Add("Two");
list1.Add("Three");
list1.Add("Four");
다음으로, 요소를 담을 문자열 배열을 선언한 뒤 CopyTo() 메서드를 호출하여 리스트 내용을 배열로 복사합니다.
string[] arr = new string[20];
list1.CopyTo(arr);
배열의 크기는 복사할 요소 수보다 충분히 커야 합니다. 위 예제에서는 여유를 두고 크기를 20으로 지정했습니다. 만약 배열 크기가 리스트 요소 수보다 작으면 ArgumentException이 발생하므로 주의해야 합니다.
전체 예제 코드
아래는 리스트를 1차원 배열로 복사하는 전체 코드입니다.
using System;
using System.Collections.Generic;
using System.Linq;
public class Demo {
public static void Main() {
List<string> list1 = new List<string>();
list1.Add("One");
list1.Add("Two");
list1.Add("Three");
list1.Add("Four");
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...
One
Two
Three
Four
After copy...
One
Two
Three
Four
참고: 리스트 자체를 새 리스트로 복제하는 방법
CopyTo()는 배열로 복사할 때 사용되며, 리스트 자체를 새로운 리스트로 복제하려면 다음과 같은 방법을 사용할 수 있습니다.
// 1. 생성자 이용
List<string> list2 = new List<string>(list1);
// 2. ToList() 확장 메서드 이용 (System.Linq 필요)
List<string> list3 = list1.ToList();
두 방법 모두 얕은 복사(shallow copy)라는 점에 유의하세요. 즉, 참조 타입 요소의 경우 복제된 리스트도 동일한 객체를 참조하게 됩니다.