HOWTO · Csharp

C#에서 목록을 다른 목록에 추가하는 방법

C#에서 한 목록을 다른 목록에 추가하는 방법을 알아보세요

이 페이지의 내용

한 C# List<T>의 요소를 다른 목록에 추가하려면, 이를 받을 목록에서 AddRange를 호출하세요. 제네릭 컬렉션 형식은 List<T>이며, 여기서 T는 요소 형식을 나타냅니다. 원본 요소는 원래 순서대로 대상의 기존 요소 뒤에 추가됩니다. AddRange는 대상을 변경합니다. 원본 목록을 중첩된 요소로 추가하지는 않습니다. 두 컬렉션 모두 호환되는 요소 형식을 포함할 때 이 메서드를 사용하세요. List<T>는 한 형식의 요소를 저장하므로, 일치하는 대상과 원본을 선택하세요.

C#에서 한 목록을 다른 목록에 추가하는 방법

List<T>는 요소들이 동일한 형식 T를 공유하는 크기 조정 가능한 컬렉션입니다. 이 예제에서 두 목록 모두 정수를 포함합니다. System.Collections.Generic 네임스페이스가 List<T>를 제공하므로, 프로젝트가 해당 네임스페이스를 아직 가져오지 않았다면 포함하세요. 프로그램은 두 번째 목록을 첫 번째 목록에 추가한 다음, 결과 대상 목록을 출력합니다.

제네릭 형식 표기는 List<T>입니다. T를 모든 항목이 공유하는 요소 형식(예: int)으로 바꾸세요.

이 완전한 예제를 실행하세요.

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        List<int> firstList = new List<int> { 1, 2, 3 };
        List<int> secondList = new List<int> { 4, 5, 6 };

        firstList.AddRange(secondList);

        Console.WriteLine(string.Join(", ", firstList));
    }
}
1, 2, 3, 4, 5, 6

이 호출은 firstList에 이미 있는 값 뒤에 secondList의 값을 추가합니다. 대상은 평면적인 List<int>로 유지됩니다. 두 목록 모두 호환되는 요소 형식을 가져야 합니다. 예를 들어, List<int>는 이 호출을 통해 List<string>에서 문자열을 받을 수 없습니다. 대상에 다른 형식이 필요하면 먼저 요소를 변환하거나 매핑하세요.

List.AddRange로 한 목록 추가하기

AddRange는 List<T>의 인스턴스 메서드입니다. 대상에서 이를 호출하고 동일한 T의 요소를 제공하는 컬렉션을 전달하세요. 그 매개 변수는 IEnumerable<T>이므로, 원본은 배열이나 다른 호환 가능한 시퀀스일 수 있습니다. 다른 List<T>일 필요는 없습니다. 예를 들어, firstList.AddRange(secondList)는 원본 시퀀스를 firstList의 끝에 추가합니다.

이 메서드는 원본을 열거하고 그 요소를 시퀀스 순서대로 추가합니다. 호출 후 firstList에는 원래 값 뒤에 secondList의 값이 오고, secondList는 자체 요소를 유지합니다. 이러한 구분은 이후 코드에서 원본 컬렉션이 여전히 필요할 때 중요합니다. 대상도 보존해야 한다면, 다음 섹션에 표시된 것처럼 별도의 목록에서 AddRange를 호출하세요.

원래 목록을 변경하지 않고 유지하기

어느 쪽도 변경하지 않고 두 입력을 결합하려면, 첫 번째 목록에서 새 대상을 만들고 두 번째 목록을 거기에 추가하세요. List<int> combined = new List<int>(firstList); 뒤에 combined.AddRange(secondList);가 옵니다. 생성자는 첫 번째 입력의 요소를 새 목록으로 복사하고, 메서드는 그 새 대상만 변경합니다. 결합된 시퀀스에는 combined를 사용하세요. 원래 목록은 이전 상태로 계속 사용할 수 있습니다.

이는 얕은 복사입니다. 목록 구조와 요소 참조를 복사하고, 요소가 참조하는 개체는 복사하지 않습니다. int와 같은 값 형식의 경우 값이 새 목록으로 복사됩니다. 참조 형식의 경우 새 목록과 원래 목록은 계속 동일한 개체를 가리킵니다. 해당 개체가 변경 가능하고 독립적인 상태가 필요하다면, 개체의 복사본도 만드세요.

사용자 지정 개체의 목록 추가하기

AddRange는 원본 요소를 대상에 저장할 수 있을 때 사용자 지정 클래스에서도 작동합니다. 예를 들어, people과 peopleToAdd가 모두 List<Person>라면, people.AddRange(peopleToAdd)를 호출하면 각 사람이 기존 항목 뒤에 배치됩니다. 그런 다음 people을 반복하고 person.Name과 같은 속성을 읽어 표시하거나 처리할 수 있습니다.

이 메서드는 기존 Person 인스턴스에 대한 참조를 추가합니다. 개체를 복제하지는 않습니다. 어느 목록을 통해 변경 가능한 사람을 변경하면, 두 목록이 동일한 인스턴스를 참조하므로 다른 목록을 통해서도 볼 수 있습니다. 동일한 접근 방식은 요소 형식이 대상의 T와 호환되는 한 제품이나 사용자 레코드와 같은 다른 사용자 지정 형식에도 적용됩니다.