Erreichen echter Objektunabhängigkeit mit tiefen Kopien von Listen
Der Beispielcode zeigt zwei Listen (List<Book> books_1
und List<Book> books_2
), die Book
-Objekte enthalten. Eine einfache Zuweisung lässt books_2
als eine Kopie von books_1
erscheinen, aber Änderungen an books_2
wirken sich auch auf books_1
aus, da sie Verweise auf dieselben Book
-Objekte haben.
Die Bedeutung des Deep Cloning
Um wirklich unabhängige Kopien zu erstellen, müssen wir gemeinsame Referenzen vermeiden. Dazu müssen völlig neue Book
Objekte erstellt und mit Daten aus den Originalen gefüllt werden – ein Vorgang, der Deep Copying genannt wird.
Deep Copying implementieren
Tiefe Kopien können mithilfe eines Lambda-Ausdrucks mit den Methoden Select
oder ConvertAll
effizient erstellt werden:
Verwenden von Select
:
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
Verwenden von ConvertAll
:
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
Beide Ansätze generieren neue Book
-Instanzen innerhalb des Lambda-Ausdrucks und kopieren die title
-Eigenschaft aus den ursprünglichen Book
-Objekten. Die resultierende books_2
-Liste enthält völlig neue, unabhängige Book
Objekte.
Vorteile von Deep Copy
Deep Copying stellt sicher, dass Änderungen an books_2
keine Auswirkungen auf books_1
haben. Dies ist von entscheidender Bedeutung, wenn Sie mit einer geänderten Kopie arbeiten müssen, ohne die Originaldaten zu verändern. Dieser Ansatz garantiert die Datenintegrität und verhindert unbeabsichtigte Nebenwirkungen.
Das obige ist der detaillierte Inhalt vonWie erstellt man tiefe Listenkopien für echte Objektunabhängigkeit?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!