Atteindre une véritable indépendance des objets avec des copies complètes de listes
L'exemple de code montre deux listes (List<Book> books_1
et List<Book> books_2
) contenant des Book
objets. Une simple affectation fait que books_2
apparaît comme une copie de books_1
, mais les modifications apportées à books_2
affectent également books_1
car ils partagent des références aux mêmes Book
objets.
L'importance du clonage profond
Pour créer des copies véritablement indépendantes, il faut éviter les références partagées. Cela nécessite de créer des Book
objets entièrement nouveaux et de les remplir avec les données des originaux – un processus appelé copie approfondie.
Mise en œuvre de la copie approfondie
Des copies complètes peuvent être créées efficacement à l'aide d'une expression lambda avec les méthodes Select
ou ConvertAll
:
Utilisation de Select
:
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
Utilisation de ConvertAll
:
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
Les deux approches génèrent de nouvelles Book
instances dans l'expression lambda, copiant la propriété title
des objets Book
d'origine. La liste books_2
résultante contient des objets Book
complètement nouveaux et indépendants.
Avantages de la copie approfondie
La copie approfondie garantit que les modifications apportées à books_2
n'affecteront pas books_1
. Ceci est crucial lorsque vous devez travailler avec une copie modifiée sans altérer les données originales. Cette approche garantit l'intégrité des données et évite les effets secondaires involontaires.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!