HOWTO · Csharp

Copier une liste en C#

Il existe 2 méthodes principales qui peuvent être utilisées pour créer une copie séparée d'une liste en C#, la méthode linq et la méthode du constructeur de liste.

Sur cette page

Ce didacticiel présentera des méthodes pour copier une liste en C#.

Copier une liste avec Linq en C#

Le Linq peut effectuer des requêtes de type SQL sur des structures de données en C#. Nous pouvons utiliser Linq avec la méthode item.Clone(/) prédéfinie pour créer une copie d’une liste. Voir l’exemple ci-dessous.

using System;
using System.Collections.Generic;
using System.Linq;

namespace copy_a_list {
  static class Extensions {
    public static List<T> Clone<T>(this List<T> listToClone)
        where T : ICloneable {
      return listToClone.Select(item => (T)item.Clone()).ToList();
    }
  }
  class Program {
    static void Main(string[] args) {
      List<string> slist = new List<string> { "ABC", "DEF", "GHI" };
      List<string> tlist = slist.Clone();
      foreach (var t in tlist) {
        Console.WriteLine(t);
      }
    }
  }
}

Production:

ABC DEF GHI

Nous avons créé la fonction d’extension Clone() à utiliser avec une liste générique. La fonction Clone() utilise la fonction item.Clone() pour faire une copie séparée de chaque élément à l’intérieur de la liste puis retourne le résultat sous forme de liste avec la fonction ToList() en C#. Dans la fonction principale, nous avons initialisé la liste de chaînes slist et l’avons clonée dans une autre liste de chaînes tlist. Nous pouvons utiliser cette approche avec à la fois une liste de valeurs et une liste de références.

Copier une liste avec le constructeur de liste en C#

Une autre méthode plus simple pour créer une copie d’une liste consiste à utiliser le constructeur de liste en C#. Nous pouvons passer la liste précédente au constructeur de la nouvelle liste pour créer une copie de la liste précédente. L’exemple de code suivant nous montre comment créer une copie distincte d’une liste avec le constructeur de liste en C#.

using System;
using System.Collections.Generic;
using System.Linq;

namespace copy_a_list {
  class Program {
    static void method2() {}
    static void Main(string[] args) {
      List<string> slist = new List<string> { "ABC", "DEF", "GHI" };
      List<string> tlist = new List<string>(slist);
      foreach (var t in tlist) {
        Console.WriteLine(t);
      }
    }
  }
}

Production:

ABC DEF GHI

Ce code est beaucoup plus simple et plus facile à comprendre que l’approche précédente. Dans le code ci-dessus, nous avons créé une copie séparée de la liste slist dans la tlist en passant slist comme argument du constructeur de tlist. Nous ne pouvons utiliser cette approche qu’avec la liste de valeurs.