Et oui ! Je me suis sûrement très bien reposé (trop ?) pendant les vacances et c’est pour ça que j’attaque un second billet le même jour ! On va même découvrir deux opérateurs en même temps : Min et Max.

Encore et toujours avec la classe MembreDeveloppez, comment feriez-vous pour récupérer le nombre maximum de messages écrits par un membre ?

Un exemple :

int maxMessages = 0;
foreach (var currentMembre in membres)
{
        if (maxMessages < currentMembre.NombreMessages)
        {
                maxMessages = currentMembre.NombreMessages;
        }
}
Console.WriteLine(« Nombre maximum de messages écrits : {0} », maxMessages);

Avec les opérateurs Linq, on va tout simplement utiliser Max sur notre liste de membres :

int maxMessages = membres.Max(membre => membre.NombreMessages);
Console.WriteLine(« Nombre maximum de messages écrits : {0} », maxMessages);

Le hic dans la solution avec l’opérateur Max, c’est qu’on n’obtient pas le membre de developpez.com qui a écrit le plus de messages. Du moins, ce n’est pas possible avec cette surcharge de l’opérateur Max. En fait, il est possible de récupérer l’instance MembreDeveloppez en utilisant la surcharge de Max sans aucun argument. Evidemment, il faudra implémenter l’interface IComparable<T> au niveau du la classe MembreDeveloppez pour que la comparaison puisse se faire correctement.

On aura donc pour la classe MembreDeveloppez :

public class MembreDeveloppez : IComparable<MembreDeveloppez>
{
        // …
        public string Nom { get; set; }
        public int NombreMessages { get; set; }
        public int CompareTo(MembreDeveloppez other)
        {
                return this.NombreMessages.CompareTo(other.NombreMessages);
        }
}

Et au final, nous aurons :

SampleLibrary.MembreDeveloppez membreLePlusBavard = membres.Max();
Console.WriteLine(« Le membre le plus bavard est {0} avec {1} messages. », membreLePlusBavard.Nom, membreLePlusBavard.NombreMessages);

Et l’opérateur Min dans tout ça ? J’ai honte de montrer un exemple mais par principe, je vais quand même le faire. Donc avec l’opérateur, on va tout simplement pouvoir récupérer la valeur minimale dans notre collection comme ceci :

int minMessages = membres.Min(membre => membre.NombreMessages);
Console.WriteLine(« Nombre minimum de messages écrits : {0} », minMessages);

SampleLibrary.MembreDeveloppez membreLePlusDiscret = membres.Min();

Console.WriteLine(« Le membre le plus discret est {0} avec {1} messages. », membreLePlusDiscret.Nom, membreLePlusDiscret.NombreMessages);