Una classe Comparer per ordinare le collection con Generics
di Stefano Mostarda, in ASP.NET 2.0,
Per riordinare gli elementi di una lista generica, ci si deve affidare al metodo Sort().
Quando si utilizzano tipi semplici (Int32, String, Boolean, etc) questo metodo è più che sufficiente, ma quando si utilizzano le classi non lo è più in quanto bisogna specificare in base a quale campo della classe riordinare. In questo caso si deve ricorrere all'utilizzo di un comparer, e tramite questo intervenire nel proceso di ordinamento.
Per creare un comparer generico, bisogna implementare l'interfaccia IComparer
using System; public sealed class GenericComparer<T> : IComparer<T> { private string _sortColumn; private ListSortDirection _sortDirection; public GenericComparer(string sortColumn, ListSortDirection sortDirection) { SortColumn = sortColumn; SortDirection = sortDirection; } public string SortColumn { get { return _sortColumn; } private set { _sortColumn = value; } } public ListSortDirection SortDirection { get { return _sortDirection; } set { _sortDirection = value; } } public int Compare(T x, T y) { PropertyInfo propertyInfo = typeof(T).GetProperty(SortColumn); IComparable obj1 = (IComparable)propertyInfo.GetValue(x, null); IComparable obj2 = (IComparable)propertyInfo.GetValue(y, null); if (SortDirection == ListSortDirection.Ascending) return (obj1.CompareTo(obj2)); else return (obj2.CompareTo(obj1)); } }

Commenti (
piace a
non piace a



