List 생성을 위한 진정한 Deep Copy 방식
소개
많은 프로그래밍 시나리오에서는 원본 데이터 구조의 완전히 독립적인 복사본을 만드는 것이 중요합니다. C#의 List
질문
다음 코드 조각을 고려하세요.
<code class="language-csharp">List<Book> books_1 = new List<Book>(); books_1.Add(new Book("One")); books_1.Add(new Book("Two")); books_1.Add(new Book("Three")); books_1.Add(new Book("Four")); List<Book> books_2 = new List<Book>(books_1); books_2[0].title = "Five"; books_2[1].title = "Six"; // 对books_2的更改会反映在books_1中 textBox1.Text = books_1[0].title; textBox2.Text = books_1[1].title;</code>
이 코드가 새 목록을 생성하더라도 books_2의 Book 개체는 여전히 books_1의 동일한 개체에 대한 참조입니다. 따라서 books_2를 수정하면 books_1에 영향을 미칩니다.
솔루션
List의 진정한 전체 복사본을 생성하려면
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
books_1의 각 Book 개체는 LINQ의 Select 메서드를 사용하여 새 Book 개체로 변환됩니다. 그런 다음 이러한 새 개체는 books_2에 저장되어 전체 복사본이 생성됩니다.
또는 List
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
이 메소드는 각 요소가 원래 목록의 해당 요소를 변환한 결과인 새 목록을 반환합니다.
이 접근 방식을 사용하면 books_2와 books_1은 서로 독립적이므로 한 목록의 변경 사항이 다른 목록에 영향을 주지 않습니다.
위 내용은 C# 목록의 진정한 전체 복사본을 만드는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!