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
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
- Visual Basic 2010 - Espresso
- Pubblicare su Azure Functions con Visual Studio Team Services
- Impostare le regole di autorizzazione in un'area di ASP.NET MVC
- Ricavare lo spazio occupato su disco dal nostro sito
- Migliorare l'organizzazione delle risorse con Azure Policy
- Eseguire query LINQ su liste non generiche con l'operatore Cast
- Modificare il timezone di un device IoT con la Universal Windows Platform
- Disponibili la Release Preview di Windows 8 e la Release Candidate di Visual Studio 2012
- Scegliere tra le versioni Current ed LTS di ASP.NET Core
- Mostrare tutti i campi di una tabella