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
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>
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
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
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
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
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!