C#에서 StringCollection을 배열의 지정된 인덱스 위치부터 복사하려면 CopyTo() 메서드를 사용합니다. 이 메서드는 대상 배열과 복사를 시작할 인덱스 두 가지 매개변수를 받으며, 컬렉션의 모든 문자열 요소를 해당 위치부터 순서대로 배열에 복사합니다.
기본 사용 예제
다음은 StringCollection 전체를 배열의 인덱스 0부터 복사하는 기본적인 예제입니다.
using System;
using System.Collections.Specialized;
public class Demo {
public static void Main(){
StringCollection strCol = new StringCollection();
String[] strArr = new String[] { "Tim", "Tom", "Sam", "Mark", "Katie", "Jacob" };
Console.WriteLine("배열의 원래 요소...");
for (int i = 0; i < strArr.Length; i++) {
Console.WriteLine(strArr[i]);
}
// 배열 요소를 StringCollection에 추가
strCol.AddRange(strArr);
// StringCollection을 새 배열로 복사 (인덱스 0부터)
String[] arr = new String[strCol.Count];
strCol.CopyTo(arr, 0);
Console.WriteLine("StringCollection을 배열로 복사한 후의 요소...");
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i]);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다.
배열의 원래 요소... Tim Tom Sam Mark Katie Jacob StringCollection을 배열로 복사한 후의 요소... Tim Tom Sam Mark Katie Jacob
특정 인덱스부터 복사하는 예제
이번에는 복사 시작 위치를 인덱스 3으로 지정해 보겠습니다. 이 경우 대상 배열의 앞부분(인덱스 0~2)은 비어 있는 상태로 유지되고, 그 뒤부터 컬렉션의 요소가 채워집니다.
using System;
using System.Collections.Specialized;
public class Demo {
public static void Main(){
StringCollection strCol = new StringCollection();
String[] strArr = new String[] { "Tim", "Tom", "Sam", "Mark", "Katie", "Jacob", "David" };
Console.WriteLine("배열의 원래 요소...");
for (int i = 0; i < strArr.Length; i++) {
Console.WriteLine(strArr[i]);
}
// 배열 요소를 StringCollection에 추가
strCol.AddRange(strArr);
// 크기가 10인 배열을 만들고 인덱스 3부터 복사
String[] arr = new String[10];
strCol.CopyTo(arr, 3);
Console.WriteLine("인덱스 3부터 복사한 후의 요소...");
for (int i = 0; i < arr.Length; i++) {
Console.WriteLine(arr[i]);
}
}
}실행 결과
위 코드를 실행하면 다음과 같은 출력이 생성됩니다. 인덱스 0~2는 null 값으로 남아 있고, 인덱스 3부터 요소가 채워지는 것을 확인할 수 있습니다.
배열의 원래 요소... Tim Tom Sam Mark Katie Jacob David 인덱스 3부터 복사한 후의 요소... Tim Tom Sam Mark Katie Jacob David
핵심 정리
- CopyTo(array, index): StringCollection의 모든 요소를 지정한 배열의 index 위치부터 복사합니다.
- 대상 배열의 크기는 (시작 인덱스 + 컬렉션 요소 수) 이상이어야 하며, 그렇지 않으면 ArgumentException이 발생합니다.
- 복사되지 않은 배열의 나머지 영역은 참조형(String)이므로 null로 유지됩니다.
- 컬렉션에 요소를 추가할 때는 AddRange() 메서드를 활용하면 배열 전체를 한 번에 넣을 수 있습니다.