Heim > Backend-Entwicklung > C++ > Wie erstelle ich eine echte tiefe Kopie einer C#-Liste?

Wie erstelle ich eine echte tiefe Kopie einer C#-Liste?

Patricia Arquette
Freigeben: 2025-01-11 18:47:43
Original
193 Leute haben es durchsucht

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

Eine echte Deep-Copy-Methode zum Erstellen von Listen

Einführung

In vielen Programmierszenarien ist es entscheidend, eine wirklich unabhängige Kopie der ursprünglichen Datenstruktur zu erstellen. Für List in C# ist es wichtig zu verstehen, wie Deep Copy implementiert wird.

Frage

Bedenken Sie den folgenden Codeausschnitt:

<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>
Nach dem Login kopieren

Obwohl dieser Code eine neue Liste erstellt, ist das Book-Objekt in Books_2 immer noch eine Referenz auf dasselbe Objekt in Books_1. Daher wirken sich Änderungen an Bücher_2 auf Bücher_1 aus.

Lösung

Um eine echte tiefe Kopie der Liste zu erstellen muss jedes Element der Originalliste kopiert werden. Dies kann mit dem folgenden Code erreicht werden:

<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
Nach dem Login kopieren

Jedes Book-Objekt in Books_1 wird mithilfe der Select-Methode von LINQ in ein neues Book-Objekt konvertiert. Diese neuen Objekte werden dann in Books_2 gespeichert, was zu einer tiefen Kopie führt.

Alternativ können Sie einen einfacheren Ansatz mit der ConvertAll-Methode von List wählen:

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

Diese Methode gibt eine neue Liste zurück, in der jedes Element das Ergebnis der Transformation des entsprechenden Elements in der ursprünglichen Liste ist.

Bei diesem Ansatz sind Bücher_2 und Bücher_1 unabhängig voneinander und Änderungen an einer Liste wirken sich nicht auf die andere aus.

Das obige ist der detaillierte Inhalt vonWie erstelle ich eine echte tiefe Kopie einer C#-Liste?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Neueste Artikel des Autors
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage