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

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

Patricia Arquette
Patricia Arquette원래의
2025-01-11 18:47:43163검색

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

List 생성을 위한 진정한 Deep Copy 방식

소개

많은 프로그래밍 시나리오에서는 원본 데이터 구조의 완전히 독립적인 복사본을 만드는 것이 중요합니다. C#의 List에서는 Deep Copy 구현 방법을 이해하는 것이 중요합니다.

질문

다음 코드 조각을 고려하세요.

<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의 ConvertAll 메서드를 사용하여 더 간단한 접근 방식을 취할 수 있습니다.

<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>

이 메소드는 각 요소가 원래 목록의 해당 요소를 변환한 결과인 새 목록을 반환합니다.

이 접근 방식을 사용하면 books_2와 books_1은 서로 독립적이므로 한 목록의 변경 사항이 다른 목록에 영향을 주지 않습니다.

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

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.