Une véritable méthode de copie approfondie pour créer une liste
Présentation
Dans de nombreux scénarios de programmation, il est crucial de créer une copie véritablement indépendante de la structure de données d'origine. Pour List
Question
Considérez l'extrait de code suivant :
<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>
Bien que ce code crée une nouvelle liste, l'objet Book dans books_2 est toujours une référence au même objet dans books_1. Par conséquent, les modifications apportées à books_2 affecteront books_1.
Solution
Pour créer une véritable copie complète de List
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
Chaque objet Book dans books_1 est converti en un nouvel objet Book à l'aide de la méthode Select de LINQ. Ces nouveaux objets sont ensuite stockés dans books_2, ce qui donne lieu à une copie complète.
Vous pouvez également adopter une approche plus simple en utilisant la méthode ConvertAll de List
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
Cette méthode renvoie une nouvelle liste où chaque élément est le résultat de la transformation de l'élément correspondant dans la liste d'origine.
Avec cette approche, books_2 et books_1 sont indépendants l'un de l'autre et les modifications apportées à une liste n'affecteront pas l'autre.
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!