Si vous cherchiez une logique dans l’ordre que j’utilise pour présenter les opérateurs Linq, ne cherchez plus, il n’y en a aucun (ou presque étant donné que certains opérateurs sont dépendants d’autres opérateurs). Mais excepté ces quelques exceptions, il ne s’agit que d’un bon vieux random pour déterminer l’ordre dans lequel j’allais aborder les opérateurs. Maintenant que tout est dit et que l’on ne cache plus rien du tout, on va passer au sujet principal qui est l’opérateur Reverse.

On reprend notre classe MembreDeveloppez qui nous suit depuis le début :

public class MembreDeveloppez
{
        public string Nom { get; set; }
       
public int NombreMessages { get; set; }
}

Et maintenant, on va considérer que nous avons toujours une liste d’instance de la classe MembreDeveloppez et imaginons que l’on désire obtenir une nouvelle liste avec les mêmes éléments mais dans l’ordre inverse. Vous pensez de suite à ceci ?

membres.Reverse();

C’est faux ! J’ai bien demandé une nouvelle instance alors que dans le cas précédent, c’est la liste originale qui est altérée ;-) Bon, blague à part, vous avez surement imaginez le code suivant :

List<MembreDeveloppez> membres = GetMembresDeveloppez();
List<MembreDeveloppez> membresReverse = new List<MembreDeveloppez>();

for (int i = membres.Count; i > 0; i–)
{
        membresReverse.Add(membres[i - 1]);
}

Je vais même vous faire une confidence qui a tout son sens dans le sujet actuel : même si je savais comment inverser les éléments de ma liste, j’ai quand même passé 5 minutes à corriger mes erreurs d’index pour cet exemple ;-)

Tout ça pour dire qu’évidemment avec l’opérateur Reverse de Linq, c’est non plus 5 minutes qu’il vous faudra mais bien 5 secondes (pour les plus rapides bien sûr).

var result = membres.Reverse<MembreDeveloppez>();

Le temps de taper la ligne de code.

Evidemment, j’ai un peu tricher car Reverse me renvoie non pas une instance de List<MembreDeveloppez> mais un IEnumerable<MembreDeveloppez>. Un autre opérateur pourrait résoudre ce dernier point mais pour en savoir plus, il vous faudra encore un peu attendre.

A la prochaine ;)

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

A voir aussi :