Cette question m'a inspiré à écrire un post de blog: http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/
Je pense que, idéalement, l' .NET Cadre comprendrait une statique de la méthode de tri qui accepte un IList<T>, mais la meilleure chose à faire est de créer votre propre méthode d'extension. Il n'est pas trop dur pour créer un couple de méthodes qui vous permettent de trier une IList<T> comme vous le feriez pour une Liste<T>. En bonus, vous pouvez surcharger le LINQ OrderBy méthode d'extension en utilisant la même technique, de sorte que si vous êtes en utilisant la Liste.Trier, IList.De tri ou de IEnumerable.OrderBy, vous pouvez utiliser la même syntaxe.
public static class SortExtensions
{
// Sorts an IList<T> in place.
public static void Sort<T>(this IList<T> list, Comparison<T> comparison)
{
ArrayList.Adapter((IList)list).Sort(new ComparisonComparer<T>(comparison));
}
// Convenience method on IEnumerable<T> to allow passing of a
// Comparison<T> delegate to the OrderBy method.
public static IEnumerable<T> OrderBy<T>(this IEnumerable<T> list, Comparison<T> comparison)
{
return list.OrderBy(t => t, new ComparisonComparer<T>(comparison));
}
}
// Wraps a generic Comparison<T> delegate in an IComparer to make it easy
// to use a lambda expression for methods that take an IComparer or IComparer<T>
public class ComparisonComparer<T> : IComparer<T>, IComparer
{
private readonly Comparison<T> _comparison;
public ComparisonComparer(Comparison<T> comparison)
{
_comparison = comparison;
}
public int Compare(T x, T y)
{
return _comparison(x, y);
}
public int Compare(object o1, object o2)
{
return _comparison((T)o1, (T)o2);
}
}
Grâce à ces extensions, trier vos IList comme vous le feriez avec une Liste:
IList<string> iList = new []
{
"Carlton", "Alison", "Bob", "Eric", "David"
};
// Use the custom extensions:
// Sort in-place, by string length
iList.Sort((s1, s2) => s1.Length.CompareTo(s2.Length));
// Or use OrderBy()
IEnumerable<string> ordered = iList.OrderBy((s1, s2) => s1.Length.CompareTo(s2.Length));
Il n'y a plus d'infos dans le post: http://blog.velir.com/index.php/2011/02/17/ilistt-sorting-a-better-way/