> 백엔드 개발 > C++ > C#에서 목록의 전체 복사본을 만드는 방법은 무엇입니까?

C#에서 목록의 전체 복사본을 만드는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2025-01-11 18:36:42
원래의
441명이 탐색했습니다.

How to Create a Deep Copy of a List in C#?

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_2books_1의 완전히 독립적인 전체 복사본임을 보장합니다. 두 목록 중 하나를 변경해도 다른 목록에는 영향을 주지 않습니다. 이는 Book 클래스(또는 목록에 포함된 모든 유형)에 새 인스턴스 생성을 용이하게 하는 적합한 생성자가 있다고 가정한다는 점을 기억하세요. Book 클래스에 더 많은 속성이 있는 경우 그에 따라 new Book(...) 생성자 호출에 해당 속성을 포함해야 합니다.

위 내용은 C#에서 목록의 전체 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿