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));
}
}Nota: Questo script contiene un allegato.
Esprimi il tuo giudizio su questo script:
Per procedere devi essere autenticato.
Aggiungi un nuovo commento »»»
Per inserire un commento, devi registrarti alla nostra community.









Stampa
Snippet
Download



