using System; using System.Collections.Generic; namespace Developpez.Dotnet.Collections { /// /// Fournit des méthodes d'extension pour travailler avec des et des /// public static class CompareExtensions { /// /// Obtient un à partir de la comparaison spécifiée /// /// Type des éléments à comparer /// La comparaison à utiliser /// Un qui utilise la comparaison spécifiée public static IComparer ToComparer(this Comparison comparison) { comparison.CheckArgumentNull("comparison"); return new ComparisonComparer(comparison); } /// /// Obtient une à partir du spécifié /// /// Type des éléments à comparer /// Comparateur à utiliser /// La comparaison équivalente au spécifié public static Comparison ToComparison(this IComparer comparer) { comparer.CheckArgumentNull("comparer"); return comparer.Compare; } /// /// Inverse le spécifié /// /// Le type des éléments à comparer /// Le comparateur à inverser /// Un comparateur avec une logique inversée public static IComparer Reverse(this IComparer comparer) { comparer.CheckArgumentNull("comparer"); return new ReverseComparer(comparer); } /// /// Inverse la spécifiée /// /// Le type des éléments à comparer /// La comparaison à inverser /// Une comparaison avec une logique inversée public static Comparison Reverse(this Comparison comparison) { comparison.CheckArgumentNull("comparison"); return (x, y) => comparison(y, x); } /// /// Renvoie le maximum des deux arguments /// /// Type des objets à comparer /// Comparateur à utiliser /// Premier objet à comparer /// Second objet à comparer /// x si x >= y selon le comparateur spécifié, sinon y public static T Max(this IComparer comparer, T x, T y) { comparer.CheckArgumentNull("comparer"); if (comparer.Compare(x, y) >= 0) return x; return y; } /// /// Renvoie le minimum des deux arguments /// /// Type des objets à comparer /// Comparateur à utiliser /// Premier objet à comparer /// Second objet à comparer /// x si x <= y selon le comparateur spécifié, sinon y public static T Min(this IComparer comparer, T x, T y) { comparer.CheckArgumentNull("comparer"); if (comparer.Compare(x, y) <= 0) return x; return y; } } }