Maison >développement back-end >C++ >Comment créer une copie complète d'une liste en C# ?
Copie approfondie de listes en C#
L'attribution directe d'une liste en C# (par exemple, List<T> list2 = list1;
) ou l'utilisation de List<T> list2 = new List<T>(list1);
crée une copie superficielle. Les modifications apportées à une liste affectent l’autre car elles partagent les mêmes objets sous-jacents. Pour créer une véritable copie complète, dans laquelle les modifications apportées à une liste sont indépendantes des autres, vous devez dupliquer les objets contenus. Voici comment :
Méthode 1 : Utilisation de LINQ (recommandée)
L'approche la plus concise et la plus efficace utilise la méthode Select
de LINQ pour créer de nouvelles instances de chaque objet dans la liste :
<code class="language-csharp">List<Book> books_2 = books_1.Select(book => new Book(book.title)).ToList();</code>
Cette ligne parcourt books_1
, crée un nouvel objet Book
pour chaque élément en utilisant le title
existant (en supposant que votre classe Book
a un constructeur qui prend le titre), puis reconvertit la séquence résultante dans un nouveau List<Book>
.
Méthode 2 : Utiliser ConvertAll
(Alternative)
La méthode ConvertAll
propose une syntaxe légèrement plus simple pour le même résultat :
<code class="language-csharp">List<Book> books_2 = books_1.ConvertAll(book => new Book(book.title));</code>
Cela permet d'obtenir la même copie approfondie que l'approche LINQ. Choisissez la méthode que vous trouvez la plus lisible.
Les deux méthodes garantissent que books_2
est une copie profonde complètement indépendante de books_1
. Toute modification apportée à l’une ou l’autre liste n’affectera pas l’autre. N'oubliez pas que cela suppose que votre classe Book
(ou quel que soit le type contenu dans votre liste) dispose d'un constructeur approprié pour faciliter la création de nouvelles instances. Si votre classe Book
a plus de propriétés, vous devrez les inclure dans l'appel du constructeur new Book(...)
en conséquence.
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!