Oggi avevo la necessità di ordinare una lista di oggetti custom, creata attraverso la lista generica List
. L'ordinamento però, prima lo dovevo fare su una particolare proprietà, poi su un altra.
Solitamente creavo un comparer personalizzato, ma ho trovato un modo veramente molto più veloce e leggibile.
Al metodo Sort() di tale lista, è possibile passare un delegato ed effettuare la comparazione dei valori in-line, sulle proprietà dei propri elementi custom.
Quindi, a fronte di un oggetto del genere:
public class CustomItem
{
public DateTime Date { get; set; }
public double Value { get; set; }
}
Ecco come possiamo rapidamento effettuare il sorting degli elementi, su proprietà diverse:
List<CustomItem> list = new List<CustomItem>();
list.Add(new CustomItem() { Date = DateTime.Now, Value = 1.0 });
list.Add(new CustomItem() { Date = DateTime.Now.AddYears(1), Value = 0.5 });
//sort sulla data
list.Sort(delegate(CustomItem item1, CustomItem item2)
{
return item1.Date.CompareTo(item2.Date);
});
//sort su un double
list.Sort(delegate(CustomItem item1, CustomItem item2)
{
return item1.Value.CompareTo(item2.Value);
});
Il tutto senza dover creare un comparer ad hoc.
A mio parere, è una tecnica semplice e che velocizza notevolmente il lavoro.
TAGS: [Generics] [Comparer] [Sorting]