Una classe Comparer per ordinare le collection con Generics

di , 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<T> e gestire il metodo Compare che viene invocato dal metodo sort quando deve effettuare il confronto tra 2 elementi.

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

Visualizza/aggiungi commenti

Una classe Comparer per ordinare le collection con Generics (#852) 1010 1
| Condividi su: Twitter, Facebook, LinkedIn

Per inserire un commento, devi avere un account.

Fai il login e torna a questa pagina, oppure registrati alla nostra community.

Approfondimenti

I più letti di oggi