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

Wie erstelle ich eine tiefe Kopie einer Liste in C#?

Patricia Arquette
Patricia ArquetteOriginal
2025-01-11 18:36:42501Durchsuche

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

Deep Copying-Listen in C#

Durch die direkte Zuweisung einer Liste in C# (z. B. List<T> list2 = list1;) oder die Verwendung von List<T> list2 = new List<T>(list1); wird eine flache Kopie erstellt. Änderungen an einer Liste wirken sich auf die andere aus, da sie dieselben zugrunde liegenden Objekte verwenden. Um eine echte Tiefenkopie zu erstellen, bei der Änderungen an einer Liste unabhängig von der anderen sind, müssen Sie die enthaltenen Objekte duplizieren. So geht's:

Methode 1: Verwendung von LINQ (empfohlen)

Der prägnanteste und effizienteste Ansatz nutzt die Select-Methode von LINQ, um neue Instanzen jedes Objekts in der Liste zu erstellen:

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

Diese Zeile durchläuft books_1, erstellt ein neues Book-Objekt für jedes Element unter Verwendung des vorhandenen title (vorausgesetzt, Ihre Book-Klasse verfügt über einen Konstruktor, der den Titel übernimmt) und konvertiert dann die resultierende Sequenz zurück in ein neues List<Book>.

Methode 2: Verwendung von ConvertAll (Alternative)

Die ConvertAll-Methode bietet eine etwas einfachere Syntax für das gleiche Ergebnis:

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

Dadurch wird die gleiche tiefe Kopie erreicht wie mit dem LINQ-Ansatz. Wählen Sie die Methode, die Sie besser lesbar finden.

Beide Methoden stellen sicher, dass books_2 eine völlig unabhängige tiefe Kopie von books_1 ist. Alle an einer Liste vorgenommenen Änderungen wirken sich nicht auf die andere aus. Denken Sie daran, dass dies davon ausgeht, dass Ihre Book-Klasse (oder welcher Typ auch immer Ihre Liste enthält) über einen geeigneten Konstruktor verfügt, um die Erstellung neuer Instanzen zu erleichtern. Wenn Ihre Book-Klasse über mehr Eigenschaften verfügt, müssen Sie diese entsprechend in den new Book(...)-Konstruktoraufruf aufnehmen.

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

Stellungnahme:
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