Ca y est, nous venons de franchir le 10e billet de la série « Les opérateurs de requête Linq de Aggregate à Where« . Je suis assez satisfait de voir que ça avance mais il reste encore pas mal d’opérateurs à voir ! Ne perdons pas de temps et pour aujourd’hui, nous allons aborder les opérateurs ToArray & ToList.

Prenons le cas de notre liste d’instances de la classe MembreDeveloppez :

List<SampleLibrary.MembreDeveloppez> membres = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez();

Comment feriez-vous pour transférer vos instances dans un tableau ? (le tableau étant un MembreDeveloppez[])

Par exemple, vous pourriez avoir pensé à ce code :

SampleLibrary.MembreDeveloppez[] membresToArray = new SampleLibrary.MembreDeveloppez[membres.Count];
for (int i = 0; i < membres.Count; i++)
{
        membresToArray[i] = membres[i];
}

Et bien, il y a beaucoup plus simple à présent grâce à l’opérateur ToArray ! Fini les boucles, une seule ligne de code sera nécessaire :

SampleLibrary.MembreDeveloppez[] membresToArray = membres.ToArray();

Et le contraire est possible grâce à l’opérateur ToList qui vous permettra d’obtenir une liste typée (dans notre cas nous aurons List<MembreDeveloppez>).

List<SampleLibrary.MembreDeveloppez> membresToList = membresToArray.ToList();

A chaque utilisation de ToArray ou ToList, c’est une nouvelle instance de tableau ou de liste typée qui est instanciée et évidemment, les éléments contenus sont les mêmes que dans la séquence source (ce sont donc les mêmes références). Si vous ne m’avez pas compris, regardez le bout de code ci-dessous :

List<SampleLibrary.MembreDeveloppez> membres = SampleLibrary.MembreDeveloppez.GetMembresDeveloppez();

Console.WriteLine(« Est-ce que la liste source est la même que la liste créée avec l’opérateur ToList ? {0} », membres == membres.ToList());
Console.WriteLine(« Est-ce que le premier élément de la liste source est le même que celui de la liste créée avec l’opérateur ToList ? {0} », membres[0] == membres.ToList()[0]);

Ce qui donnera à l’exécution :

Est-ce que la liste source est la même que la liste créée avec l’opérateur ToList ? False
Est-ce que le premier élément de la liste source est le même que celui de la liste créée avec l’opérateur ToList ? True

Sachez aussi que les opérateurs (comme d’ailleurs tous les autres opérateurs Linq) peuvent être utilisés sur n’importe quelles collections d’objets à condition qu’elle implémente l’interface IEnumerable<T>.

Bon Linq !

 

Téléchargez les sources (sous Visual Studio 2008).