Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 컬렉션(List)을 배열(Array)로 복사하는 방법

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()를 사용하는 것이 좋습니다.