首頁 >後端開發 >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的真正深拷貝方法

引言

在許多程式設計場景中,建立與原始資料結構真正獨立的副本至關重要。對於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>

透過使用LINQ的Select方法,books_1中的每個Book物件都會轉換為新的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