C#의 목록 전체 복사
C#에서 목록을 직접 할당(예: List<T> list2 = list1;
)하거나 List<T> list2 = new List<T>(list1);
을 사용하면 얕은 복사본이 생성됩니다. 한 목록을 수정하면 동일한 기본 개체를 공유하므로 다른 목록에도 영향을 줍니다. 한 목록의 변경 사항이 다른 목록과 독립적인 실제 깊은 복사본을 만들려면 포함된 개체를 복제해야 합니다. 방법은 다음과 같습니다.
방법 1: LINQ 사용(권장)
가장 간결하고 효율적인 접근 방식은 LINQ의 Select
메서드를 활용하여 목록 내 각 개체의 새 인스턴스를 만드는 것입니다.
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
이 줄은 books_1
을 반복하고 기존 Book
을 사용하여 각 요소에 대해 새 title
객체를 생성한 다음(Book
클래스에 제목을 사용하는 생성자가 있다고 가정) 결과 시퀀스를 다시 변환합니다. 새로운 List<Book>
.
방법 2: ConvertAll
사용(대체)
ConvertAll
메소드는 동일한 결과에 대해 약간 더 간단한 구문을 제공합니다.
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
이는 LINQ 접근 방식과 동일한 Deep Copy를 달성합니다. 더 읽기 쉬운 방법을 선택하세요.
두 가지 방법 모두 books_2
가 books_1
의 완전히 독립적인 전체 복사본임을 보장합니다. 두 목록 중 하나를 변경해도 다른 목록에는 영향을 주지 않습니다. 이는 Book
클래스(또는 목록에 포함된 모든 유형)에 새 인스턴스 생성을 용이하게 하는 적합한 생성자가 있다고 가정한다는 점을 기억하세요. Book
클래스에 더 많은 속성이 있는 경우 그에 따라 new Book(...)
생성자 호출에 해당 속성을 포함해야 합니다.
위 내용은 C#에서 목록의 전체 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!